Где используется мое место на /var?

Я начинающий администратор Linux и теперь отвечаю за операционную систему кластера Tomcat с 3 узлами. (Tomcat успешно обрабатывается DEV.)

Наше решение для мониторинга встревожило меня тем, что / var на server01 осталось всего 172 МБ свободного места. Скорее всего, потому что / var / log заполнился.

Итак, я исследовал с:

server01:/var# for i in $(ls); do du -sh $i; done
3.5M backups
100M cache
51M lib
0   local
0   lock
598M log
0   mail
0   opt
40K run
32K spool
144K tmp
4.0K www

Если я подытожу это, я получу около 760 МБ памяти. Числа не меняются, если я копаю глубже в дерево каталогов. Так что это правильно.

Но если я выполню df -h, я получу совершенно другие числа для / var. df показывает, что 2.8G из 3.0G используются.

server01:/var# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             950M  205M  697M  23% /
tmpfs                 2.0G     0  2.0G   0% /lib/init/rw
udev                  2.0G  4.0K  2.0G   1% /dev
/dev/sda3             961M   33M  928M   4% /tmp
/dev/dm-0             2.0G  506M  1.5G  26% /usr
/dev/dm-1             3.0G  2.8G  172M  95% /var
/dev/dm-2              20G   17G  3.3G  84% /home

Самое смешное, что два других узла сообщают о еще большем использовании разнесенных в / var. Поскольку / var / log / на узлах 2 и 3 занимают на 200-300 МБ больше места. Но разделы и базовый LVM имеют одинаковый размер на всех 3 узлах.

На server02 и server03 df -h сообщает, что все в порядке и только от 1,0 до 1,2 ГБ используются из 3,0 ГБ.

Так где же используется мое пространство?

Я слышал о тех маленьких ублюдках, называемых инодами, и проверил это. df -i сообщает:

server01:/var# df -i
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1             123648    6099  117549    5% /
tmpfs                 506908       3  506905    1% /lib/init/rw
udev                  506487     675  505812    1% /dev
/dev/sda3             987968       7  987961    1% /tmp
/dev/dm-0            2048000   19786 2028214    1% /usr
/dev/dm-1             705808    1807  704001    1% /var
/dev/dm-2            13619632    5906 13613726    1% /home

И на server02 и server03:

server03:/var# df -i
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1             123648    6100  117548    5% /
tmpfs                 506908       3  506905    1% /lib/init/rw
/dev                  506487     675  505812    1% /dev
/dev/sda3             987968       7  987961    1% /tmp
/dev/dm-0            2048000   19784 2028216    1% /usr
/dev/dm-1            3096576    1758 3094818    1% /var
/dev/dm-2            13113840    5642 13108198    1% /home

Таким образом, / var на server01 имеет 705.808 inode, тогда как server02 и server03 имеют 3.096.576 inode на / var. Но действительно ли это причина? Так как только 1% используется на каждом узле.

Если да, как мне увеличить иноды? (Все файловые системы - это XFS из / то есть ext2)

/ etc / fstab одинаков на всех 3 узлах. ОС Debian Lenny 64bit с ядром 2.6.35.4.

С уважением

3 ответа

Вы можете запустить lsof | grep deleted и проверьте программы-ведьмы, выделившие это место (и удаленный файл).

пример:

[root@mab-01 ~]# lsof | grep deleted
hald-addo  2651 haldaemon  txt       REG              253,0      15720    3769183 /usr/libexec/hald-addon-keyboard.#prelink#.IhBW5L (deleted)
yum-updat  2899      root  txt       REG              253,0       4736    3276902 /usr/bin/python.#prelink# (deleted)
mongod     5535    mongod  txt       REG              253,0    8640360    3484794 /usr/bin/mongod (deleted)
mongod     5535    mongod    1w      REG              253,0     278032     262244 /var/log/mongo/mongod.log.rpmsave (deleted)
mongod     5535    mongod    2w      REG              253,0     278032     262244 /var/log/mongo/mongod.log.rpmsave (deleted)

/var/log заполнил

Если вы удаляете файлы журналов, которые открыты для записи процессом, имена файлов исчезают (так что du?) Их не видит, но выделенное пространство все еще выделяется, и, поскольку процесс продолжает запись, выделенное пространство может увеличиться.

Если журналы были журналами TomCat, необходимо указать Tomcat, чтобы он снова открыл его файлы журналов.

Обратите внимание на "copytruncate" в этом примере. Я не знаю, относится ли это к вашей ситуации, хотя.

Спасибо за совет с lsof | grep удален. На самом деле я получаю десятки удаленных файлов для Apache2 и Tomcat6.

server01:~# lsof | grep deleted | wc -l
124

После перезапуска Apache2 количество удаленных файлов уменьшилось до 40. И у меня было 2,4 ГБ свободного на /var. Я также искал удаленный файл на двух других хостах и ​​обнаружил, что на server02 есть также удаленный файл, который все еще открыт. К счастью, на этот раз я уже говорил "ps auxf". Там я увидел, что ветка Apache2 была открыта с 8 ноября. После "kill -9 $oldapache2threadpid" эти удаленные файлы также исчезли. Может быть, это также проблема на server01.

Затем я сделал перезапуск службы Tomcat на server01. Удаленные файлы также исчезли, но свободное место не увеличилось. Но свободное место на / var теперь соответствует (с несколькими МБ) тому, что говорит мне du -sch.

Итак, спасибо за помощь всем:-)

Еще нужно выяснить, почему Apache не закрывает все свои потоки.

С уважением

Другие вопросы по тегам