調整PHP-FPM(Nginx)的子程式

parvin發表於2019-01-19

問題:

日誌中出現以下警告訊息:

[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。

原文:https://myshell.co.uk/blog/20…

相關文章