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, так как он более легкий, чем остальные. По-видимому, каждый виртуальный хост в конечном итоге запускается в своем собственном процессе, который будет высасывать больше памяти.

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