У меня есть сервер apache, настроенный с рабочим MPM следующим образом:
<IfModule mpm_worker_module>
ServerLimit 20
ThreadLimit 50
StartServers 3
MaxClients 1000
MinSpareThreads 50
MaxSpareThreads 200
ThreadsPerChild 50
MaxRequestsPerChild 10000
</IfModule>
Сервер ежедневно принимает около 2 миллионов запросов. Когда поступают запросы, сервер apache перестанет принимать новое соединение (браузер не может подключиться). И процесс останется в списке процессов. Использование памяти составляет около 10%, а загрузка процессора составляет 0%. Похоже, сервер apache не смог перезапустить процессы, когда это необходимо.
Я нашел что-то связанное с падением в журналах ошибок:
[Mon Aug 15 12:36:24 2011] [error] child process 11444 still did not exit, sending a SIGKILL
[Mon Aug 15 12:36:24 2011] [error] child process 12090 still did not exit, sending a SIGKILL
[Mon Aug 15 12:36:24 2011] [error] child process 10698 still did not exit, sending a SIGKILL
[Mon Aug 15 12:36:24 2011] [error] child process 12144 still did not exit, sending a SIGKILL
[Mon Aug 15 12:36:24 2011] [error] child process 12032 still did not exit, sending a SIGKILL
[Mon Aug 15 12:36:24 2011] [error] child process 10699 still did not exit, sending a SIGKILL
[Mon Aug 15 12:36:25 2011] [notice] caught SIGTERM, shutting down
[Mon Aug 15 12:37:31 2011] [notice] mod_python: Creating 8 session mutexes based on 20 max processes and 50 max threads.
[Mon Aug 15 12:37:31 2011] [notice] mod_python: using mutex_directory /tmp
[Mon Aug 15 12:37:31 2011] [notice] Apache/2.2.17 (Ubuntu) mod_python/3.3.1 Python/2.7.1+ mod_ssl/2.2.17 OpenSSL/0.9.8o configured -- resuming normal operations
[Mon Aug 15 15:36:46 2011] [error] server is within MinSpareThreads of MaxClients, consider raising the MaxClients setting
[Mon Aug 15 15:38:48 2011] [error] server reached MaxClients setting, consider raising the MaxClients setting
[Mon Aug 15 16:17:31 2011] [warn] child process 766 still did not exit, sending a SIGTERM
[Mon Aug 15 16:17:31 2011] [warn] child process 767 still did not exit, sending a SIGTERM
Есть идеи? Благодарность!
Ответы:
Возможно, вы захотите проверить состояние вашего сервера с помощью mod_status. У вас могут быть соединения, которые не отключаются и застряли в состоянии «отправка ответа» (W). Прочтите эту статью о том, как диагностировать этот отчет httpd maxclients и modstatus.
источник