у меня есть Apache 2.4 веб-сервер, который работает на микроэкземпляре AWS с CentOS.
Apache запускает PHP с модулем prefork MPM.
Доступ к серверу осуществляется через балансировщик нагрузки Amazon, который имеет проверку работоспособности, которая пытается получить доступ к веб-странице index.php сервера каждые 60 секунд.
Проблема в том, что через 1-2 дня Apache достигает 256 открытых процессов со страницей index.php и выдает следующую ошибку:
[Sun Sep 08 02:13:00.356051 2013] [mpm_prefork:error] [pid 1201] (12)Cannot allocate memory: AH00159: fork: Unable to fork new process
[Sun Sep 08 02:13:13.656694 2013] [mpm_prefork:error] [pid 1201] AH00161: server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers setting
Обычно, когда это происходит, новые http-соединения больше не принимаются.
Вероятно, Apache не закрывает все подключения балансировщика нагрузки.
У нас есть еще один сервер с Apache 2.2, на котором нет этой проблемы, поэтому, вероятно, проблема связана с версией 2.4, которая сильно отличается от 2.2 (мы не меняли конфигурации Apache по умолчанию).
mod_status включен, и вот результат, который мы могли бы получить, когда это произошло однажды: http://www.speedyshare.com/vE3My/server-status.txt
Кто-нибудь знает, как подойти к этой проблеме?
Заранее спасибо!
Я обнаружил, что процессы apache набухают (утечка памяти), когда они используются повторно на неопределенное время, стоит установить MaxRequestsPerChild 200
в вашем httpd.conf и перезапустите.