Хорошо, я ненавижу быть беспомощным апачским новичком, но я чувствую себя здесь в тупике.
Внезапно вчера вечером наш сайт WordPress отключился. Я перезагрузил его и посмотрел пару минут, и все показалось хорошо, поэтому я оставил его в покое. Затем я просыпаюсь и снова обнаруживаю, что он не работает. После небольшого исследования я обнаружил, что, несмотря на то, что в то время было всего около 20 запросов в минуту, Apache продолжает формировать новый экземпляр практически для каждого запроса, пока он не достигнет MaxClients, а затем экземпляры просто сидят и ничего не делают. Буквально 0,1% загрузки ЦП для всей системы в этот момент. Если я вхожу в MySQL и просматриваю список процессов, я вижу соответствующее соединение с базой данных для каждого httpd, поэтому похоже, что сценарии никогда не заканчиваются. Но если я запрашиваю статический файл или даже простой PHP-файл «Hello world» до того, как он достигнет MaxClients, этот запрос будет выполнен нормально.
Я действительно не знаю, на что смотреть, потому что ни у кого из присутствующих здесь нет технических возможностей для использования SSH в коробке или даже для установки плагинов, и я знаю, что не касался этого по крайней мере несколько дней, поэтому я не Даже не знаю, что могло измениться, чтобы вызвать проблему.
Устанавливается Apache 2.2.3 / prefork с mod_php 5.2.6. Вот явно соответствующие настройки (дайте мне знать, если вы что-нибудь знаете):
Timeout 20
KeepAlive Off
<IfModule prefork.c>
StartServers 2
MinSpareServers 1
MaxSpareServers 3
MaxClients 50
MaxRequestsPerChild 2000
</IfModule>
max_execution_time = 600 ; Set so high for large file uploads
max_input_time = 600 ; Set so high for large file uploads
memory_limit = 128M ; Set so high for large file uploads
log_errors = On
Несколько вещей, которые я пробовал:
tail -f
ing error_log tail -f
ing access_log, чтобы узнать, не подвергаются ли мы DDOS или что-то в этом роде Я чувствую, что мне что-то не хватает прямо перед моим лицом, но хоть убей, я не могу понять, что здесь не так. Так что я надеюсь, что кто-то более опытный в системном администрировании уже видел, что я делаю неправильно.
Хорошо, извините за вопрос о поддержке активности .. Что говорит "show processlist" на сервере mysql? Обычно проблема объясняется заблокированной / поврежденной таблицей.
Ваши скрипты php в Apache внезапно стали очень медленными. Вам нужно выяснить, в чем ваше узкое место. Поскольку у вас нет высокой загрузки процессора - это может быть свопинг, медленный диск или сетевой ввод-вывод, медленный сервер базы данных, медленные запросы DNS и многие другие причины.
Сначала проверьте все журналы на наличие подозрительных ошибок. Если вы все еще не знаете, вы можете попробовать настроить процесс apache, чтобы увидеть, какой вызов является медленным, в качестве начала отладки.