If you need to calculate and change these values based on the amount of memory on the system the following command will help us to determine the memory used by each (PHP-FPM) child process:
ps -ylC php-fpm --sort:rss
pm.max_children can be calculated as:
pm.max_children = Total RAM dedicated to the web server / Max child process size
The server has 8GB of RAM, so:
pm.max_children = 6144MB / 85MB = 72
You need to take into account any other services running on the machine while calculating memory usage.
Then change the settings as follow:
pm.max_children = 70 pm.start_servers = 20 pm.min_spare_servers = 20 pm.max_spare_servers = 35 pm.max_requests = 500
Можно проверить среднее использование памяти процессами PHP-FPM этой коммандой:
ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'
Пример.
Объем общей / доступной / используемой памяти можно посмотреть с помощью free:
# free -m
total used free shared buff/cache available
Mem: 1803 1588 73 3 141 52
Swap: 2047 955 1092
Далее, возьмем за основу формулу для расчета pm.max_children (источник), и проведем расчет на примере:
Total Max Processes = (Total Ram - (Used Ram + Buffer)) / (Memory per php process)
Всего ОЗУ: 4Гб
Используется ОЗУ: 1000Мб
Буфер безопасности: 400Мб
Память на один дочерний php-fpm процесс (в среднем): 30Мб
Максимально возможное кол-во процессов = (4096 - (1000 + 400)) / 30 = 89
Четное количество: 89 округлили в меньшую сторону до 80
Значение остальных директив можно установить исходя из ожидаемой нагрузки на приложение а также учесть чем еще занимается сервер кроме работы php-fpm (скажем СУБД также требует ресурсов). В случае наличия множества задач на сервере – стоит снизить к-во как начальных / максимальных процессов.
К примеру учтем что на сервере находиться 2 пула www1 и www2 (к примеру 2 веб-ресурса), тогда конфигурация каждого из них может выглядеть как:
pm.max_children = 40 ; 80 / 2
pm.start_servers = 15
pm.min_spare_servers = 15
pm.max_spare_servers = 25
https://community.webcore.cloud/tutorials/how_to_solve_php_fpm_server_reached_max_children/
http://logvik.com/оптимизация-для-серверов-приложений-на-основе-nginxphp-fpm/php-fpm
https://hcbogdan.com/php/2016/09/16/php-fpm-dynamic/
http://adminunix.ru/nastrojka-php-fpm-nginx-na-vps/