"tail -f" делает диск заполненным?
Наш сервер приложений (sunOS) всегда заполнен диском. и наша команда по инфраструктуре сказала, что это вызвано слишком большим количеством "хвостовых" процессов. Поскольку приложение часто вращает файл журнала, это привело к неработающей ссылке и отсутствию места на диске? Я никогда не слышал об этом раньше. эта команда действительно вызывает переполнение диска?
2 ответа
Пространство, занимаемое файлом, не может быть восстановлено, пока не исчезнут все ссылки на этот файл. Поэтому любой процесс, в котором открыт файл, будет препятствовать удалению файла с диска.
Активный tail -f
следуя файлу, например.
Если эти файлы необходимо удалить, чтобы освободить место на диске (например, потому что они очень большие или их очень много), то наличие процессов, лежащих вокруг, которые содержат ссылки на них, предотвратит их удаление и в конечном итоге приведет к заполнению диска. вверх.
Отредактируйте в ответ на комментарий к другому ответу:
Диагностика, о которой вы сообщаете, это именно то , что вы ожидаете увидеть в ситуации, которую мы с Адамом описываем. df
сообщает, что 56G
диска используются, и du
сообщает, что только 10G
видны в папке. Расхождение в том, что есть 46G
ценность файлов, которые были удалены из папки, но не могут быть физически удалены с диска, потому что некоторые процессы содержат ссылки на них.
Достаточно легко поэкспериментировать с этим самостоятельно: найдите файловую систему, с которой можно безопасно играть, и создайте огромный файл. Напишите программу на C, которая открывает файл и входит в бесконечный цикл. Теперь сделайте следующее:
- Запустить программу
- Проверьте вывод
df
rm
файл- Проверьте вывод
df
снова - Остановите вашу программу
- Проверьте вывод
df
снова
Вы увидите, что вывод df
не меняется после rm
файл, но меняется после того, как вы остановите программу (удалив последнюю ссылку на файл).
Если вам нужно еще больше доказательств того, что это именно то, что происходит, вы можете получить информацию от /proc
файловая система, если она у вас есть. В частности, найти PID одного из tail -f
процессы (или другие процессы, которые вы считаете, могут быть причиной), и посмотрите на каталог /proc/<pid>/fd
чтобы увидеть все открытые файлы.
(У меня нет *nix дома, поэтому я не могу проверить, что вы увидите /proc/<pid>/fd
в этой ситуации)
tail
команда для просмотра конца файла, и -f
выполняет это в режиме реального времени, обновляя отображение всякий раз, когда изменяется сам файл. Это позволяет в режиме реального времени просматривать файлы журналов.
tail
может вызвать проблемы двумя способами:
- Если
tail -f
неправильно используется для записи в файл вместо интерактивной консоли, это неэффективное средство копирования файла и создание дублирующих журналов. tail -f
поддерживает сохранение файла журнала, поэтому задачи обслуживания, пытающиеся автоматически удалить файлы журнала, не выполняются. Это отбрасывает ротацию файла журнала, не позволяя старому устаревать.
Если ваша инфраструктурная команда жалуется на доступ к файлам, которым меньше недели, вам действительно нужно больше места на диске и / или менее подробная стратегия ведения журналов, поскольку они не могут поддерживать достаточное количество журналов в случае, если что-то пойдет не так и нужно отслеживаются. Если журналы старше, чем это, они могут иметь хорошую точку зрения и чрезмерное использование tail
- как и все, что держит файл открытым - может препятствовать его своевременному удалению.
Сама по себе команда вряд ли будет заполнять диск, но может препятствовать операциям по гигиене диска.