У меня есть каталог файлов журнала в / var / log / apache2 / vhosts на выделенном сервере Debian. Каждый день я разбиваю основной журнал доступа на соответствующие файлы vhostname.com_access_log в / var / log / apache2 / vhosts
Примерно за последнюю неделю я заметил, что сервер перестал отвечать, и каждый раз, когда это происходит, кажется, что выполняется несколько экземпляров ротации журналов.
После некоторого расследования я решил проверить содержимое / var / log / apache2 / vhosts, чтобы увидеть, есть ли какие-то проблемы. Я могу войти в каталог через cd, но не могу перечислить его содержимое. Команда ls не умирает, она просто ничего не делает.
Попробовав различные способы составить список содержимого файла, я решил просто удалить его и создать новый файл. Однако запуск rm в каталоге из родительского каталога тоже не сработал: rm -rf vhosts. С точки зрения «сверху» я вижу, что «rm» работает и использует небольшое количество процессора ... Теперь он работает около часа.
Есть идеи, что происходит и как я могу избавиться от этого каталога?
ДАЛЬНЕЙШАЯ ИНФОРМАЦИЯ:
Видя много ошибок этого типа в / var / log / messages, не знаю, связана ли это:
Oct 15 12:22:39 sp5059b kernel: [2257339.255530] apache2 D a9b86504 0 32217 9125
Oct 15 12:22:39 sp5059b kernel: [2257339.255533] dea15620 00000086 00000000 a9b86504 0007f05b dea157ac c1fdbfc0 00000001
Oct 15 12:22:39 sp5059b kernel: [2257339.255538] 00000000 00000000 00000001 00000000 00000000 00000000 00000000 00000000
Oct 15 12:22:39 sp5059b kernel: [2257339.255542] f7246ec0 f7246ec8 f7246ec4 dea15620 c02b95c6 c2483e80 d7085e80 dea15620
Oct 15 12:22:39 sp5059b kernel: [2257339.255547] Call Trace:
Oct 15 12:22:39 sp5059b kernel: [2257339.255553] [<c02b95c6>] __mutex_lock_slowpath+0x50/0x7b
Oct 15 12:22:39 sp5059b kernel: [2257339.255557] [<c02b945c>] mutex_lock+0xa/0xb
Oct 15 12:22:39 sp5059b kernel: [2257339.255561] [<c015810c>] generic_file_aio_write+0x41/0xa9
Oct 15 12:22:39 sp5059b kernel: [2257339.255565] [<f892ef99>] ext3_file_write+0x19/0x83 [ext3]
Oct 15 12:22:39 sp5059b kernel: [2257339.255575] [<c017460e>] do_sync_write+0xbf/0x100
Oct 15 12:22:39 sp5059b kernel: [2257339.255581] [<c0131a98>] autoremove_wake_function+0x0/0x2d
Oct 15 12:22:39 sp5059b kernel: [2257339.255585] [<c0132368>] set_process_cpu_timer+0x27/0xae
Oct 15 12:22:39 sp5059b kernel: [2257339.255590] [<c0125be2>] do_setitimer+0x2aa/0x31a
Oct 15 12:22:39 sp5059b kernel: [2257339.255594] [<c017e0a0>] fasync_helper+0x3c/0xb7
Oct 15 12:22:39 sp5059b kernel: [2257339.255597] [<c01bafe5>] security_file_permission+0xc/0xd
Oct 15 12:22:39 sp5059b kernel: [2257339.255601] [<c017454f>] do_sync_write+0x0/0x100
Oct 15 12:22:39 sp5059b kernel: [2257339.255605] [<c0174d80>] vfs_write+0x83/0x120
Oct 15 12:22:39 sp5059b kernel: [2257339.255608] [<c0175352>] sys_write+0x3c/0x63
Oct 15 12:22:39 sp5059b kernel: [2257339.255612] [<c01038d2>] syscall_call+0x7/0xb
Oct 15 12:22:39 sp5059b kernel: [2257339.255618] =======================
И еще несколько ошибок:
Oct 15 12:22:39 sp5059b kernel: [2257339.255618] =======================
Oct 15 13:52:55 sp5059b kernel: [2262820.703285] INFO: task kswapd0:173 blocked for more than 120 seconds.
Oct 15 13:52:55 sp5059b kernel: [2262820.703310] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
Oct 15 13:52:55 sp5059b kernel: [2262820.703342] kswapd0 D 9527f7ea 0 173 2
Oct 15 13:52:55 sp5059b kernel: [2262820.703346] f747c4e0 00000046 c036f160 9527f7ea 0007f529 f747c66c c1fdbfc0 00000001
Oct 15 13:52:55 sp5059b kernel: [2262820.703352] 00000000 00000001 0051b47e 00000000 00000000 00000000 00000246 c0131ba7
Oct 15 13:52:55 sp5059b kernel: [2262820.703357] f77dc400 f7731dc4 f77dc450 00396fe5 f8899e28 f77dc414 00000000 f747c4e0
Oct 15 13:52:55 sp5059b kernel: [2262820.703362] Call Trace:
Oct 15 13:52:55 sp5059b kernel: [2262820.703374] [<c0131ba7>] prepare_to_wait+0x12/0x4d
Oct 15 13:52:55 sp5059b kernel: [2262820.703383] [<f8899e28>] log_wait_commit+0x8b/0xd1 [jbd]
Oct 15 13:52:55 sp5059b kernel: [2262820.703393] [<c0131a98>] autoremove_wake_function+0x0/0x2d
Oct 15 13:52:55 sp5059b kernel: [2262820.703398] [<f88975dd>] journal_try_to_free_buffers+0x123/0x13b [jbd]
Oct 15 13:52:55 sp5059b kernel: [2262820.703407] [<f89320f7>] ext3_releasepage+0x0/0x57 [ext3]
Oct 15 13:52:55 sp5059b kernel: [2262820.703420] [<c0156409>] try_to_release_page+0x33/0x45
Oct 15 13:52:55 sp5059b kernel: [2262820.703424] [<c015ee80>] shrink_page_list+0x3c7/0x4a8
Oct 15 13:52:55 sp5059b kernel: [2262820.703431] [<c015e349>] isolate_lru_pages+0x44/0x17f
Oct 15 13:52:55 sp5059b kernel: [2262820.703436] [<c015e349>] isolate_lru_pages+0x44/0x17f
Oct 15 13:52:55 sp5059b kernel: [2262820.703441] [<c015f04f>] shrink_inactive_list+0xee/0x2fd
Oct 15 13:52:55 sp5059b kernel: [2262820.703450] [<c015f30e>] shrink_zone+0xb0/0xcd
Oct 15 13:52:55 sp5059b kernel: [2262820.703454] [<c015fa64>] kswapd+0x27b/0x3ed
Oct 15 13:52:55 sp5059b kernel: [2262820.703459] [<c015e484>] isolate_pages_global+0x0/0x42
Oct 15 13:52:55 sp5059b kernel: [2262820.703463] [<c0131a98>] autoremove_wake_function+0x0/0x2d
Oct 15 13:52:55 sp5059b kernel: [2262820.703468] [<c015f7e9>] kswapd+0x0/0x3ed
Oct 15 13:52:55 sp5059b kernel: [2262820.703471] [<c01319d7>] kthread+0x38/0x5d
Oct 15 13:52:55 sp5059b kernel: [2262820.703474] [<c013199f>] kthread+0x0/0x5d
Oct 15 13:52:55 sp5059b kernel: [2262820.703477] [<c01044f7>] kernel_thread_helper+0x7/0x10
Oct 15 13:52:55 sp5059b kernel: [2262820.703482] =======================
Oct 17 16:39:21 sp5059b kernel: [2448749.835890] INFO: task exim4:15225 blocked for more than 120 seconds.
Oct 17 16:39:21 sp5059b kernel: [2448749.835915] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
Oct 17 16:39:21 sp5059b kernel: [2448749.835947] exim4 D 0f35bdb1 0 15225 15223
Oct 17 16:39:21 sp5059b kernel: [2448749.835951] c24032c0 00000082 c1fdbfc0 0f35bdb1 00089b8e c240344c c1fdbfc0 00000001
Oct 17 16:39:21 sp5059b kernel: [2448749.835956] 00000000 00000001 000013fa 00000000 00000000 00000000 00000246 c0131ba7
Oct 17 16:39:21 sp5059b kernel: [2448749.835962] f77dc400 e6185f20 f77dc450 0039e41c f8899e28 f77dc414 00000000 c24032c0
Oct 17 16:39:21 sp5059b kernel: [2448749.835967] Call Trace:
Oct 17 16:39:21 sp5059b kernel: [2448749.835978] [<c0131ba7>] prepare_to_wait+0x12/0x4d
Oct 17 16:39:21 sp5059b kernel: [2448749.835986] [<f8899e28>] log_wait_commit+0x8b/0xd1 [jbd]
Oct 17 16:39:21 sp5059b kernel: [2448749.835996] [<c0131a98>] autoremove_wake_function+0x0/0x2d
Oct 17 16:39:21 sp5059b kernel: [2448749.836001] [<f8896451>] journal_stop+0x12f/0x151 [jbd]
Oct 17 16:39:21 sp5059b kernel: [2448749.836009] [<f892f0b7>] ext3_sync_file+0x57/0x9c [ext3]
Oct 17 16:39:21 sp5059b kernel: [2448749.836022] [<c015744c>] filemap_fdatawrite+0x12/0x16
Oct 17 16:39:21 sp5059b kernel: [2448749.836027] [<c018f5b5>] do_fsync+0x41/0x83
Oct 17 16:39:21 sp5059b kernel: [2448749.836031] [<c018f614>] __do_fsync+0x1d/0x2b
Oct 17 16:39:21 sp5059b kernel: [2448749.836034] [<c01038d2>] syscall_call+0x7/0xb
Oct 17 16:39:21 sp5059b kernel: [2448749.836041] =======================
Мне кажется, у вас могло быть огромное количество файлов в каталоге. Я видел симптомы, очень похожие на те, которые вы описываете для очень больших каталогов.
Возможно, возникла какая-то проблема (возможно, проблема конфигурации с logrotate), из-за которой у вас остались миллионы файлов. Как только вы попадете в миллионы, у большинства файловых систем начнутся проблемы. Просто делаю ls
может занять очень много времени и даже умереть, если вы будете ждать достаточно долго. Команды вроде rm
точно так же будут проблемы из-за огромного количества файлов. Точно так же такие вещи, как logrotate, будут зависать, потому что выполнение простых операций с каталогом займет очень много времени.
Один из способов проверить это - выполнить ls -l
в каталоге выше (в данном случае / var / log / apache2 /) и просмотрите размер записи в каталоге (а не ее содержимое). Например (с моего сервера, где есть несколько каталогов с множеством файлов):
$ ls -lh
rwxrwxr-x 2 ironport ironport 11M Apr 21 19:37 oma01syslog01/
drwxrwxr-x 2 ironport ironport 12M Apr 21 19:37 oma01syslog02/
drwxrwxr-x 2 ironport ironport 5.8M Mar 17 12:30 sat01syslog01/
drwxrwxr-x 2 ironport ironport 4.0K Jun 29 2011 swn01syslog01/
$ for DIR in * ; do echo -n "$DIR: " ; find $DIR -type f -print | wc -l ; done
oma01syslog01: 204332
oma01syslog02: 195500
sat01syslog01: 70960
swn01syslog01: 0
Обратите внимание на размер записи каталога по сравнению с количеством файлов в нем.
Лучше всего попробовать просмотреть файлы с чем-то вроде find
. Он не пытается вытащить весь список перед их отображением и может позволить вам запрашивать и работать с каталогом без проблем, которые вы видите в ls
и rm
. Ниже приведены некоторые полезные примеры.
Количество файлов:
find ./directory/name/here -type f -print | wc -l
Просмотрите образец файлов в каталоге:
find ./directory/name/here -type f -print | head -20 | xargs ls -lh
Удалите из каталога все файлы, соответствующие шаблону:
find ./directory/name/here -type f -iname '*.log' -print | xargs rm -rf
Заметка: Я только что заметил ваш комментарий, где вы показали ls
из одного каталога вверх:
drwxr-xr-x 2 root root 126406656 2011-10-17 18:51 vhosts
Это подтверждает мои подозрения. 126406656 байт - 120 МБ. Это довольно большая запись в каталоге (из приведенного выше примера у меня была запись в каталоге размером 11 МБ с 200 тыс. Файлов), и это предполагает, что в этом каталоге были миллионы файлов.
Проблема вроде решилась сама собой ??!?
Я заметил, что нагрузка на сервер снизилась с пикового среднего значения около 70 до уровня 1-3 (где он обычно находится).
Я запустил: screen rm -rf vhosts
Вернулся примерно через полчаса и попытался возобновить экран и ничего. Ура! Каталог был удален.
На самом деле никто не знает, что произошло / происходит, но, по крайней мере, часть проблемы исчезла.
Больше никаких странных ошибок ядра.
Зависание задач - очень серьезная ошибка. Это настолько серьезно, что есть файл proc с именем / proc / sys / kernel / hung_task_panic для автоматической паники / перезагрузки. Это означает, что процесс зависает в ядре очень долго, этого не должно происходить при нормальном использовании.
Это должно быть на Ошибка сервера, но:
бит чтения в вашем каталоге кажется отключенным: используйте что-то вроде chmod a+r
имя директора чтобы исправить это.
Скорее всего, это произойдет при создании каталога; это делает сценарий ротации журналов? Ожидается, что несколько одновременных экземпляров этого сценария вызовут проблемы, но я удивлен, что это вызовет проблемы с разрешениями в каталоге. В любом случае вам нужен более быстрый способ поворота и, возможно, механизм, предотвращающий запуск сценария, когда он уже запущен.