"tail -f" делает диск заполненным? - PullRequest
4 голосов
/ 21 марта 2012

наш сервер приложений (sunOS) всегда заполнен диском. и наша команда по инфраструктуре сказала, что это вызвано слишком большим количеством "хвостовых" процессов. Поскольку приложение часто вращает файл журнала, это привело к неработающей ссылке и отсутствию места на диске? Я никогда не слышал об этом раньше. эта команда действительно вызывает переполнение диска?

Ответы [ 2 ]

6 голосов
/ 21 марта 2012

Пространство, занимаемое файлом, не может быть использовано до тех пор, пока не исчезнут все ссылки на этот файл.Поэтому любой процесс, в котором файл открыт, будет препятствовать удалению файла с диска.

Активный tail -f, следующий за файлом, например.

Если эти файлы необходимо удалить, чтобы освободить место на диске (например, потому что они очень большие или их очень много), тогда наличие процессов, лежащих вокруг, которые содержат ссылки на них, предотвратит их удаление и в конечном итоге приведет к заполнению дискаup.

Отредактируйте в ответ на комментарий к другому ответу:

Диагностика, о которой вы сообщаете, точно , что вы ожидаете увидеть в ситуации, когда мы с Адамомописать.df сообщает, что используется 56G диска, а du сообщает, что в папке виден только 10G.Расхождение связано с тем, что существует 46G файлов, которые были удалены из папки, но не могут быть физически удалены с диска, потому что некоторые процессы содержат ссылки на них.

Экспериментировать с этим достаточно просто.сами: найдите файловую систему, с которой можно безопасно играть, и создайте огромный файл.Напишите программу на C, которая открывает файл и входит в бесконечный цикл.Теперь сделайте следующее:

  • Запустите программу
  • Проверьте вывод df
  • rm файла
  • Проверьтевывод df снова
  • Остановите вашу программу
  • Проверьте вывод df снова

Вы увидите, что вывод df не '• изменить после rm файла, но он изменится, как только вы остановите программу (удалив последнюю ссылку на файл).

Если вам нужно еще больше доказательств того, что это происходит, вы можетеиметь возможность получать информацию из файловой системы /proc, если она у вас есть.В частности, найдите PID одного из tail -f процессов (или других процессов, которые, по вашему мнению, могут быть причиной), и посмотрите на каталог /proc/<pid>/fd, чтобы увидеть все открытые файлы.

(У меня нет * nix дома, поэтому я не могу проверить, что вы увидите /proc/<pid>/fd в этой ситуации)

0 голосов
/ 21 марта 2012

tail - это команда для просмотра конца файла, а -f выполняет ее в режиме реального времени, обновляя отображение всякий раз, когда изменяется сам файл. Это позволяет в режиме реального времени просматривать файлы журналов.

tail может вызвать проблемы двумя способами:

  1. Если tail -f неправильно используется для записи в файл вместо интерактивной консоли, это неэффективное средство копирования файла и создание дублирующих журналов.
  2. tail -f поддерживает сохранение файла журнала, поэтому задачи обслуживания, пытающиеся автоматически удалить файлы журнала, не выполняются. Это сбрасывает ротацию файла журнала, не позволяя старому устаревать.

Если ваша инфраструктурная команда жалуется на доступ к файлам моложе недели, вам действительно нужно больше места на диске и / или менее многословная стратегия ведения журналов, поскольку они не могут поддерживать достаточное количество журналов. на случай, если что-то пойдет не так и должно быть отслежено. Если журналы старше этого, они могут быть полезны, и чрезмерное использование tail - как и все, что сохраняет файл открытым - может помешать его своевременному удалению.

Команда сама по себе вряд ли заполнит диск, но может препятствовать выполнению операций по гигиене диска.

...