Назад | Перейти на главную страницу

Apache вызывает высокую нагрузку на сервер

Каждый раз, когда Apache убивает дочерний процесс, чтобы создать новые после MaxRequestPerChild удовлетворен, я вижу несуществующие процессы Apache в ps вывод. Там неработающие процессы проходят сами собой за короткое время. Однако есть временное резкое повышение средней нагрузки сервера.

Я не могу понять, почему эти процессы переходят в неработающее состояние, когда их убивают.

Я запускаю приложение PHP с модулем mod_php в Apache, модуль предварительной вилки Apache. Я не могу обновить PHP на сервере из-за необходимости приложения.

Любая идея?

Вы не можете убить его, потому что он уже мертв. Остается только запись в таблице процессов. В Unix и Unix-подобных компьютерных операционных системах зомби-процесс или несуществующий процесс - это процесс, который завершил выполнение, но все еще имеет запись в таблице процессов. Эта запись по-прежнему необходима, чтобы родительский процесс мог читать статус выхода своего дочернего процесса. Нет ничего плохого в том, чтобы допустить такие процессы, если их не будет много. В конце концов, зомби пожинает его родитель (вызывая wait (2)). Если исходный родитель не получил его до своего выхода, то процесс init (pid == 1) сделает это позже. Zombie Process - это просто:

A process that has terminated and that is deleted when its exit status has been reported to another process which is waiting for that process to terminate.

Я предполагаю, что вы размещаете некоторые тяжелые PHP-приложения (например, Magento или Drupal с некоторыми тяжелыми сторонними модулями), и очистка используемых ресурсов (соединений с базой данных и т.д.) во время выхода занимает некоторое время. Точно так же создание новых процессов занимает некоторое время.

Конечно, в вашем Apache могут быть установлены тяжелые модули, например mod_security. Или в ваш PHP загружены дополнительные модули. Трудно сказать, поскольку ваш вопрос довольно расплывчатый и не содержит деталей.