Apache обрабатывает зависание и попадание в MaxClients
Я использую прилично загруженный веб-сервер (выделенный Apache/PHP), и хотя он работает нормально большую часть времени, примерно раз в день он блокируется и отказывается от любых новых подключений. Перезапуск Apache устраняет проблему. Я поймал это несколько раз перед этой блокировкой, и Apache Status показывает все W (отправка ответа) для каждого запроса. Последняя ошибка в файле http-errors.log: MaxClients был сбит (что имеет смысл, потому что ни один запрос не возвращается).
Ребята, у вас есть идеи, почему запрос Apache может решить никогда не возвращаться, или есть мысли о том, что здесь может происходить?
Спасибо!
2 ответа
Похоже, у вас страшный синдром Буша (PBS для краткости).... это означает, что вы застряли со слишком большим количеством W (отправка ответа). К счастью, есть очень простое решение. Причиной может быть то, что ваш скрипт выполняет длинный свернутый запрос, который никогда не завершается. Ознакомьтесь с этой статьей, в которой объясняется, как исправить диагноз и отследить причину соединений, застрявших в состоянии "отправка ответа". http://techmythsworld.blogspot.com/2011/11/solving-httpd-maxclients-and-modstatus.html
Короче говоря, вам нужно сделать следующее: 1. Найти скрипт, который застревает в букве W и что бы на нем ни публиковалось (это могут быть очень уникальные переменные, которые вызывают его застревание.
Убедитесь, что вы можете воссоздать ситуацию, разместив вызывающие переменные в сценарии. Вы увидите соединение с вашего ipaddress, которое останется в W.
Отследить, если у вас есть цикл или запрос к базе данных, который не заканчивается.
Исправьте скрипт. и перепечатав переменные, вы должны увидеть, что застрял в W для вашего ipaddress.
PS. Вы должны перезапускать веб-сервер при каждом тесте, чтобы сбросить соединение (команда "service httpd restart" должна сделать
Я также видел эту проблему, когда PHP-FPM не работал. Сайты были недоступны, а процессы остались в статусе "W". Перезапуск PHP-FPM решил проблему.