Рейтинг:0

Apache вызывает резкий скачок нагрузки после перезагрузки

флаг cn

На моем сервере работает Ubuntu 18.04.5 LTS со стеком LAMP (PHP 7.4) и версией apache 2.4.29 с использованием Prefork MPM. Мой сервер имеет 16 процессоров и 29 ГБ оперативной памяти. На этом сервере размещено 258 веб-сайтов.

Всякий раз, когда я перезагружаю свой сервер, я замечаю (используя команду top), что apache создает сумасшедшее количество процессов. Это полностью перегружает сервер. Это ТОЛЬКО происходит, когда я перезагружаю сервер или вручную останавливаю apache (служба apache2 останавливается), а затем запускаю apache (запуск службы apache2).

Обычно это вывод top (в обычные часы):

введите описание изображения здесь

После перезагрузки или остановки и запуска apache вручную средняя загрузка превышает 126,4! Медленно (примерно через 10-15 минут) приходит в норму. В течение первых 5 минут после перезагрузки или остановки и запуска apache нагрузка просто неуклонно растет, пока не достигнет 126-130.

Вот моя конфигурация MPM (/etc/apache2/mods-enabled/mpm_prefork.conf):

<IfModule mpm_prefork_module>
     StartServers           5
     MinSpareServers        5
     MaxSpareServers        10
     MaxRequestWorkers      150
     MaxConnectionsPerChild 0
 </IfModule>

Также KeepAlive включен, MaxKeepAliveRequests равен 100, а KeepAliveTimeout равен 2.

Что очень странно, так это то, что я сделал точную копию сервера и разместил на копии несколько сайтов (6 веб-сайтов), и когда я перезагружаюсь или запускаю и останавливаю apache на этом сервере-копии, такого поведения не происходит. Это ТОЧНАЯ копия упомянутого выше сервера, просто на нем размещается всего 6 веб-сайтов (ГОРАЗДО меньше трафика) вместо 258.

Может ли эта проблема быть вызвана слишком большим количеством клиентских подключений, ожидающих ответа apache во время перезагрузки, и когда сервер apache, наконец, возвращается, он наводняет apache подключениями?

Поможет ли в этом увеличение значений в моей конфигурации MPM? Я проверял журналы и никогда не пересматривал MaxRequestWorkers.

Michael Hampton avatar
флаг cz
Первое очевидное, что нужно сделать, это избавиться от низкопроизводительного mpm_prefork (и mod_php) и переключиться на php-fpm и mod_event (или лучше на nginx).
флаг cn
Это производственный сервер, может ли переключение на mod_event вызвать проблемы? Я просто не хочу переключаться и отключать клиентские сайты в процессе.
Michael Hampton avatar
флаг cz
Выполнение практически любого действия может вызвать проблемы. Но это то, что вам, по-видимому, нужно было сделать в течение очень долгого времени, возможно, лет, поэтому вам следует начать планирование и тестирование, чтобы выяснить, какими могут быть эти проблемы.
ezra-s avatar
флаг ru
Я согласен с Майклом Хэмптоном, за исключением части nginx, которую он продвигает при любой возможности. Apache не вызывает этого, php. Проблема в том, что труднее увидеть, если вы соберете все это вместе. Если это производство, то я предлагаю вам протестировать замену с apache w/mpm_event + php-fpm, работающую с PHP, вы не только получите больше контроля над своими конфигурациями php, но и даже несколько разных, если хотите (пулы fpm) , но у вас также будет очень меньший след от apache, с несколькими процессами, но вместо этого столько рабочих потоков, сколько необходимо.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.