Решить проблему нехватки памяти, вызванную слишком большим количеством процессов php-fpm в Linux.

PHP Linux

Что мы можем сделать, когда служба базы данных личных блогов часто внезапно зависает, делая ее недоступной? Тема этой статьи — зафиксировать процесс обнаружения блоггерами проблем, анализа проблем и, наконец, решения проблем в ответ на это явление.

проблема найдена

Недавно я обнаружил, что сервер Linux и служба базы данных моего личного блога часто зависают, что приводит к необходимости перезагрузки для нормального доступа к нему, что крайне отвратительно, поэтому я полон решимости решить проблему и освободить свое время и энергии (не хочу часто иметь проблемы, а потом перезапускать вручную, трудоемко и долго).

анализировать проблему

После обнаружения проблемы сначала используйтеfree -mКоманда для просмотра текущего состояния выполнения сервера:

free -m

Видно, что память моего сервера составляет 2 ГБ, но доступной памяти на данный момент всего 70 МБ, а уровень использования памяти достигает 92%.Весьма вероятно, что служба базы данных зависает из-за большого объема памяти. скорость использования.

Продолжайте видеть детали, используйтеtopинструкция:

top

Затем просмотрите детали процесса, перечисленные в выводе команды, сосредоточив внимание на коэффициенте использования памяти в 10-м столбце:

top

Обнаружено, что загрузка ЦП не высока, и проблема ЦП также исключена.Кроме того, видно, что служба базы данных занимает 15,2% памяти.Если использование памяти слишком велико, процесс базы данных ( процесс с наибольшим использованием памяти) будет выдавлен, что приведет к зависанию службы. , поэтому нам нужно увидеть подробное использование памяти, какие процессы потребляют так много памяти?

Используйте команду:

ps auxw|head -1;ps auxw|sort -rn -k4|head -40

Ознакомьтесь с топ-40 процессов, потребляющих больше всего памяти:

ps -auxw

Глядя на коэффициент использования памяти в четвертом столбце, обнаруживается, что помимо службы базы данных mysql, пул службы php-fpm открыл слишком много подпроцессов, занимая более половины памяти, проблема была обнаружена. , и мы приступили к решению задачи: настройка и контроль количества процессов в пуле процессов php-fpm.

Решать проблему

С помощью различных методов поиска обнаружено, что конфигурация может бытьpm.max_childrenдля управления количеством дочерних процессов php-fpm.Сначала откройте файл конфигурации php-fpm и выполните команду:

vi /etc/php-fpm.d/www.conf

оказатьсяpm.max_childrenполе и обнаружил, что его значение слишком велико:

www.conf

Как показано на рисунке,pm.max_childrenЗначение 50, каждый процесс занимает 1%-2,5% памяти, а он потребляет больше половины памяти, поэтому нам нужно уменьшить его значение, здесь блогер ставит 25, а заодно проверить следующие два свойства:

  1. pm.max_spare_servers: Это значение указывает максимальное гарантированное количество простаивающих процессов, если бездействующий процесс больше этого значения, это будет очищено.
  2. pm.min_spare_servers: Гарантировать минимальное количество простаивающих процессов, если бездействующий процесс меньше этого значения, создать новый дочерний процесс;

Ни одно из значений не может быть больше, чемpm.max_childrenзначение, обычно устанавливаемоеpm.max_spare_serversзначениеpm.max_children60%-80% от стоимости.

Наконец, перезапустите php-fpm

systemctl restart php-fpm

Снова взглянув на использование памяти, использование памяти намного ниже:

www.conf

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

Оригинал статьи, пожалуйста, укажите:вперед отБлог Сюн Цзянгана

Ссылка на эту статью: Решить проблему нехватки памяти, вызванную слишком большим количеством процессов php-fpm в Linux.