Что мы можем сделать, когда служба базы данных личных блогов часто внезапно зависает, делая ее недоступной? Тема этой статьи — зафиксировать процесс обнаружения блоггерами проблем, анализа проблем и, наконец, решения проблем в ответ на это явление.
проблема найдена
Недавно я обнаружил, что сервер Linux и служба базы данных моего личного блога часто зависают, что приводит к необходимости перезагрузки для нормального доступа к нему, что крайне отвратительно, поэтому я полон решимости решить проблему и освободить свое время и энергии (не хочу часто иметь проблемы, а потом перезапускать вручную, трудоемко и долго).
анализировать проблему
После обнаружения проблемы сначала используйтеfree -m
Команда для просмотра текущего состояния выполнения сервера:
Видно, что память моего сервера составляет 2 ГБ, но доступной памяти на данный момент всего 70 МБ, а уровень использования памяти достигает 92%.Весьма вероятно, что служба базы данных зависает из-за большого объема памяти. скорость использования.
Продолжайте видеть детали, используйтеtop
инструкция:
Затем просмотрите детали процесса, перечисленные в выводе команды, сосредоточив внимание на коэффициенте использования памяти в 10-м столбце:
Обнаружено, что загрузка ЦП не высока, и проблема ЦП также исключена.Кроме того, видно, что служба базы данных занимает 15,2% памяти.Если использование памяти слишком велико, процесс базы данных ( процесс с наибольшим использованием памяти) будет выдавлен, что приведет к зависанию службы. , поэтому нам нужно увидеть подробное использование памяти, какие процессы потребляют так много памяти?
Используйте команду:
ps auxw|head -1;ps auxw|sort -rn -k4|head -40
Ознакомьтесь с топ-40 процессов, потребляющих больше всего памяти:
Глядя на коэффициент использования памяти в четвертом столбце, обнаруживается, что помимо службы базы данных mysql, пул службы php-fpm открыл слишком много подпроцессов, занимая более половины памяти, проблема была обнаружена. , и мы приступили к решению задачи: настройка и контроль количества процессов в пуле процессов php-fpm.
Решать проблему
С помощью различных методов поиска обнаружено, что конфигурация может бытьpm.max_children
для управления количеством дочерних процессов php-fpm.Сначала откройте файл конфигурации php-fpm и выполните команду:
vi /etc/php-fpm.d/www.conf
оказатьсяpm.max_children
поле и обнаружил, что его значение слишком велико:
Как показано на рисунке,pm.max_children
Значение 50, каждый процесс занимает 1%-2,5% памяти, а он потребляет больше половины памяти, поэтому нам нужно уменьшить его значение, здесь блогер ставит 25, а заодно проверить следующие два свойства:
-
pm.max_spare_servers
: Это значение указывает максимальное гарантированное количество простаивающих процессов, если бездействующий процесс больше этого значения, это будет очищено. -
pm.min_spare_servers
: Гарантировать минимальное количество простаивающих процессов, если бездействующий процесс меньше этого значения, создать новый дочерний процесс;
Ни одно из значений не может быть больше, чемpm.max_children
значение, обычно устанавливаемоеpm.max_spare_servers
значениеpm.max_children
60%-80% от стоимости.
Наконец, перезапустите php-fpm
systemctl restart php-fpm
Снова взглянув на использование памяти, использование памяти намного ниже:
После многократных наблюдений за использованием памяти было обнаружено, что после этого улучшения потребление ресурсов памяти сервера значительно уменьшилось.
Оригинал статьи, пожалуйста, укажите:вперед отБлог Сюн Цзянгана
Ссылка на эту статью: Решить проблему нехватки памяти, вызванную слишком большим количеством процессов php-fpm в Linux.