Вчера решил немного оптимизировать хостинг, очень не понравилось, что почти все место занимает в памяти php-fpm и решил что-то с этим сделать.
Как результат изменил настройки по умолчанию, на данный момент результат радует, потребление памяти сократилось в 4-5 раз, и теперь не висит с десяток процессов, а всего один. Как будет дальше будем уже по мере поступления проверять. И так поехали, первые изменения по оптимизации памяти.
Находим файл /etc/php-fpm.d/www.conf
отрываем в любимом редакторе меняем следующие параметры.
Первое что я изменил это настройки менеджера процессов (pm).
По сути это главный процесс (master process), который будет управлять всеми дочерними по определенной логике. Всего доступно 3 схемы управления процессами:
dynamic
static
ondemand
Я перешел с dynamic на ondemand на данном этапе у меня нет сверх нагрузки, по этому не нужно мне держать процессы в памяти.
В случае если вы решили остаться на dynamic.
Для основного сервера, часто выбирают dynamic пул. Его работа описывается настройками:
pm.max_children - максимальное количество дочерних процессов
pm.start_servers - количество процессов при старте
pm.min_spare_servers - минимальное количество процессов, ожидающих соединения (запросов для обработки)
pm.max_spare_servers - максимальное количество процессов, ожидающих соединения (запросов для обработки)
Для того чтобы корректно установить эти значения, учитываем: сколько памяти в среднем потребляет дочерний процесс, объем доступного ОЗУ в принципе и не забываем помимо этого процесса у нас есть и другое ПО работающее на сервере.
В свою очередь я немного уменьшил значения по умолчанию, до первого падения.
pm.start_servers - 5
pm.min_spare_servers - 5
pm.max_spare_servers - 15
Ранее я настраивал кэширование, о котором также отдельно напишу.
В одно из статей половину занимало описание почему стоит перейти с TCP на UDS, но это мне не актуально я сразу все делал на Unix-socket
В продолжение темы Открываем доступ к robots.txt в NGINX при HTTPS-only а также Редирект 301 c http на https и с no-www на www