2012-03-21 3 views
4

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

+1

Этот вопрос может быть более подходящим для одной сестры переполнению стека в сайтов, http://www.serverfault.com. –

+0

спасибо, Адам. Позвольте мне отправить его на serverfault.com. Кстати, я вижу, что процесс хвоста будет убит после того, как мы выйдем из сеанса замазки или нажмем «Ctrl + C», почему так много хвостов обрабатывают файлы журналов? – user462872

+0

Это вопрос _excellent_. К сожалению, я не знаю достаточно о том, что Linux sysadminning расскажет вам, как отслеживать это. Удачи вам в версии ServerFault. –

ответ

6

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

Активен 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 в этой ситуации)

+0

спасибо большое, Hurkyl. Да, я наконец выясню причину. мое приложение не убивало всех вызываемых удаленных процессов, когда оно завершается. – user462872

0

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

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

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

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

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

+0

Adam, , когда я набрал команду «df -h» и попал ниже /dev/md/dsk/d1 59G 56G 2.5G 96%/log но, если я зашел в каталог журнала, набрал " du -sh ", размер этого слоя невелик, как показано выше :/log> du -sh 10G. , и мы обнаруживаем, что существует много процессов «tail -f», которые могут быть мертвы, и читают файл журнала в этой папке. поэтому мы сомневаемся, что эти хвостовые процессы используют пространство – user462872

Смежные вопросы