Apache разветвляется очень много потоков и зависает
Мы переместили один из наших сайтов на новый сервер, который время от времени полностью зависает. Сначала это случалось очень редко, может быть, раз в месяц, но теперь это начинает происходить каждый день. Под зависаниями я подразумеваю, что время ожидания всех запросов истекло, и попытка состояния apache2ctl или изящного apache2ctl в оболочке приводит к ожиданию apache2ctl в течение неопределенного времени. Только перезапуск apache2ctl выводит его из этого состояния. Кажется, я ничего не могу найти в журналах ошибок apache, журналы доступа указывают, что apache действительно не обслуживает запросы.
В настоящее время сервер в основном обслуживает один сайт, похожий на Rapidshare портал обмена файлами, обслуживающий около 1 ТБ данных. Он работает под управлением Ubuntu Lucid, имеет 8 ГБ оперативной памяти и четырехъядерный процессор Intel Xeon, с Apache-MPM-ITK и PHP 5.2.11.
На нем работает munin, и в то время, когда Apache зависает, он показывает очень большое количество потоков (650+). Обычное количество потоков - около 200, а до 650 - около 1 часа. Запуск ps в это время показывает, что это действительно apache, у которого работает много детей. Загрузка процессора / использование памяти, по-видимому, не является проблемой, на данный момент он использует только 1,1 ГБ ОЗУ, а загрузка составляет 0,05.
Мне сказали, что Lighttpd, или nginx, был бы намного лучшим решением для такого сайта. Я хочу переключиться, но я бы лучше попытался заставить это работать с этой настройкой. (старый сервер тоже работал на Apache)
Была ли mpm-itk плохой идеей? В основном я выбрал его для обеспечения безопасности работы каждого виртуального хоста под другим пользователем. Он работает в конфигурации по умолчанию, полученной из диспетчера пакетов, и это плохо, я знаю, но я не уверен, какие значения мне следует настроить.
Я публикую некоторые значения, которые могут иметь отношение, пожалуйста, попросите что-нибудь еще, если это необходимо:
Timeout 300
KeepAlive on
MaxKeepAliveRequests 100
KeepAliveTimeout 15
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
Итак, на какие ценности я должен смотреть? Есть ли что-то конкретное, что я должен grep журналы?
1 ответ
Если вам не нужна дополнительная безопасность, обеспечиваемая mpm-itk, используйте вместо этого mpm-worker, так как он более легкий, чем остальные. По-видимому, каждый виртуальный хост в конечном итоге запускается в своем собственном процессе, который будет высасывать больше памяти.