問題:
日誌中出現以下警告訊息:
[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
這意味著沒有足夠的PHP-FPM程式。
解:
我們需要根據系統記憶體量來計算和更改這些值:
pm.max_children = (total RAM - RAM used by other process) / (average amount of RAM used by a PHP process)
/etc/php-fpm.d/www.conf
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
- 以下命令將幫助我們確定每個(PHP-FPM)子程式使用的記憶體:
ps -ylC php-fpm –sort:rss
RSS列顯示PHP-FPM程式的未交換的實體記憶體使用量(千位元組)。
平均每個PHP-FPM程式在我的機器上佔用大約75MB的RAM。
pm.max_children的適當值可以計算為:
pm.max_children =專用於Web伺服器的總RAM /最大子程式大小 – 在我的情況下是85MB
伺服器有8GB的RAM,所以:
pm.max_children = 6144MB / 85MB = 72
我留下了一些記憶,讓系統呼吸。在計算記憶體使用情況時,您需要考慮在機器上執行的任何其他服務。
我已經改變了如下設定:
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
", sum/NR/1024,"M") }`
您可以使用上述相同的步驟來計算Apche Web伺服器的MaxClients的值- 只需用httpd替換php-fpm。