PHP-FPM pm.max_チルドレン設定根拠

2100 ワード

原文:http://myshell.co.uk/blog/2012/07/adjusting-child-processes-for-php-fpm-nginx/
Problem:
The follwing warning message appars in the logs:
[26-Jul-2012 09:49:59] WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 8 idle, and 58 total children
[26-Jul-2012 09:50:00] WARNING: [pool www] server reached pm.max_children setting (50), consider raising it
It means that there re not enough PHP-FPM processes.
Solution:
We need to calculate and change these values based on the amount of memory on the system:
/etc/php-fpm.d/www.com.com
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
-the follwing command will help us to determine the memory used by each(PHP-FPM)child process:
ps -ylC php-fpm --sort:rss
The RSS column shows non-swapped physical memory usage by PHP-FPM processes in kilo Bytes.
On an average each PHP-FPM process took~75 MB of RAM on my machine.
Aprisate value for pm.max_チルドレンcan be caculated as:
pm.max_children=Total RAM dedicated to the web server/Max child process size-in my case it was 85 MB
The server has 8 GB of RAM、so:
pm.max_チルドレン=6144 MB/85 MB=72
I left some memory for the system to breth.You need to take into account any other services running on the machine while calculating memory usage.
I’ve changed 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
Please note that very high values does not mean necessarly anything good.
You can check an average memory usage by single PHP-FPM process with th ishady command:
ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s
", sum/NR/1024,"M") }'
You can use the same steps above to caculate the value for MaxClients for Ache web server-just stitute thephp-fpm with httpd.