Мы переместили один из наших сайтов на новый сервер, который время от времени полностью зависает. Сначала это происходило очень редко, может быть, раз в месяц, но теперь это стало происходить каждый день. Под зависаниями я подразумеваю, что время ожидания всех запросов истекло, и попытка apache2ctl status или apache2ctl graceful в оболочке приводит к бесконечному ожиданию apache2ctl. Только перезапуск apache2ctl выводит его из этого состояния. Кажется, я ничего не могу найти в журналах ошибок apache, журналы доступа указывают, что apache действительно не обслуживает запросы.
В настоящее время сервер в основном обслуживает один сайт, портал обмена файлами типа rapidshare, обслуживающий около 1 ТБ данных. Он работает под управлением ubuntu lucid, имеет 8 ГБ оперативной памяти и четырехъядерный процессор Intel xeon, с apache-mpm-itk и PHP 5.2.11.
На нем запущен munin, и когда apache зависает, он показывает очень большое количество потоков (650+). Обычное количество потоков составляет около 200, а примерно за 1 час оно увеличивается до 650. Запуск 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>
Итак, на какие ценности я должен смотреть? Есть ли что-то конкретное, что я должен искать в журналах?
Если вам не нужна дополнительная безопасность, обеспечиваемая mpm-itk, используйте вместо нее mpm-worker, так как это больше легкий чем остальные. Вероятно, каждый виртуальный хост в конечном итоге запускается в рамках своего собственного процесса, что потребляет больше памяти.