Назад | Перейти на главную страницу

Журнал - Ядро сервера: ИНФОРМАЦИЯ: задача httpd: 000000 заблокирована более 120 секунд

Почти каждый день мой сервер дает сбой из-за высокой нагрузки на сервер, и даже перезапуск apache или mysql не может решить проблему. Мне нужно перезагрузить сервер, чтобы решить эту проблему, иначе он снова выйдет из строя из-за высокой нагрузки.

Система журналов записывает что-то вроде этого при сбое:

Aug 11 18:33:53 server kernel: INFO: task httpd:20008 blocked for more than 120 seconds.
Aug 11 18:33:53 server kernel: "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
Aug 11 18:33:53 server kernel: httpd         D ffffffff801538ac     0 20008   5816         20066 19809 (NOTLB)
Aug 11 18:33:53 server kernel:  ffff81025a299dc8 0000000000000082 ffff81033b4c0740 ffffffff80009a14
Aug 11 18:33:53 server kernel:  ffff8101063f8d80 0000000000000009 ffff8100b758f7e0 ffff8101c57187e0
Aug 11 18:33:53 server kernel:  00009436d4100b6c 000000000001d50f ffff8100b758f9c8 000000083b531588
Aug 11 18:33:53 server kernel: Call Trace:
Aug 11 18:33:53 server kernel:  [<ffffffff80009a14>] __link_path_walk+0x173/0xfb9
Aug 11 18:33:53 server kernel:  [<ffffffff8002cc16>] mntput_no_expire+0x19/0x89
Aug 11 18:33:53 server kernel:  [<ffffffff80063c4f>] __mutex_lock_slowpath+0x60/0x9b
Aug 11 18:33:53 server kernel:  [<ffffffff80023908>] __path_lookup_intent_open+0x56/0x97
Aug 11 18:33:53 server kernel:  [<ffffffff80063c99>] .text.lock.mutex+0xf/0x14
Aug 11 18:33:53 server kernel:  [<ffffffff8001b21f>] open_namei+0xea/0x712
Aug 11 18:33:54 server kernel:  [<ffffffff8002768a>] do_filp_open+0x1c/0x38
Aug 11 18:33:54 server kernel: Firewall: *UDP_IN Blocked* IN=eth1 OUT= MAC=ff:ff:ff:ff:ff:ff:00:30:48:9e:6e:99:08:00 SRC=208.43.135.158 DST=255.255.255.255 LEN=151 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=UDP SPT=38354 DPT=6112 LEN=131 
Aug 11 18:33:54 server kernel:  [<ffffffff8001a061>] do_sys_open+0x44/0xbe
Aug 11 18:33:54 server kernel:  [<ffffffff8005d28d>] tracesys+0xd5/0xe0

Я много гуглил, пытаясь найти решение. Но похоже, что решение просто обновить ядро ​​или драйвер диска, думает, что я не знаю, как это сделать.

В этом URL http://bugs.centos.org/view.php?id=4515 Многие люди сообщают о подобных проблемах, за исключением того факта, что они не связаны с httpd, как моя.

По словам одного из членов, одним из решений было бы добавить "лифт = нет" в /etc/grub.conf, как в этом примере:

title CentOS (2.6.18-238.12.1.el5xen)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-238.12.1.el5xen ro root=/dev/VolGroup00/LogVol00 elevator=noop
        initrd /initrd-2.6.18-238.12.1.el5xen.img

Действительно ли это решило бы проблему? Мой диск работает в режиме RAID. Может ли это вызвать проблемы на моем сервере?

Есть ли другое решение?

Это из-за блокировки мьютекса.

Внимательно проверьте напечатанную трассировку стопки: она перевернута. Вы найдете эту строку

mutex_lock_slowpath

Кажется, есть нехватка ресурсов.

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

/proc/sys/kernel/hung_task_timeout_secs
/proc/sys/kernel/hung_task_panic

Значение первого файла - 120. Поэтому вы видите сообщения о том, что задача заблокирована на 120 секунд. Тривиальный тест - увеличить его и посмотреть, что произойдет. Сделайте 240 или 360.

Следующий файл по умолчанию имеет значение 0. Это должно быть 1, если вы хотите собрать vmcore.

Очевидно, вам нужно настроить kdump и исправить цель дампа. Целевой объект дампа должен быть больше, чем размер физической памяти. Но даже если вы собираете vmcore, вам потребуются некоторые знания C, сборки и общей отладки, чтобы разобраться в нем. Профессиональная поддержка или системный администратор могут помочь лучше.

Но имо, смена лифта здесь ни на что не повлияет.

Запустите инструмент сбора статистики производительности (я предпочитаю sysstat, но вы можете предпочесть что-то другое) и проанализируйте, что он говорит вам о том, где находится узкое место.