php-fpm優化

餘二五發表於2017-11-16

在優化PHP的程式數的時候我們首先要了解我們伺服器執行一個php使用的記憶體

1: 查詢一個php佔用的記憶體方法

pmap $(pgrep php-fpm | head -1)

我這裡查詢到的是

00002ba5d0bec000      4K rw-s-  /dev/zero (deleted)

00002ba5d0bed000      4K rw-s-  /dev/zero (deleted)

00007fffc568b000     80K rwx–    [ stack ]

00007fffc569f000      4K rw—    [ anon ]

00007fffc57fd000     12K r-x–    [ anon ]

ffffffffff600000   8192K —–    [ anon ]

total           309548K

大概30MB的樣子

我本身機器記憶體是32G,那麼理論上計算最大能承受php的併發是 32G/30MB=1092個

那麼如果除去系統跟其他軟體的使用記憶體大概算900個

2 :php-fpm的配置公式:pm.start_servers = min_spare_servers + (max_spare_servers – min_spare_servers) / 2

pm.max_children的計算方法,本機記憶體/30兆每個為最大的限定值再適當減小

相關引數解讀:

pm.max_children:靜態方式下開啟的php-fpm程式數量。

pm.start_servers:動態方式下的起始php-fpm程式數量。

pm.min_spare_servers:動態方式下的最小php-fpm程式數量。

pm.max_spare_servers:動態方式下的最大php-fpm程式數量。

針對我的伺服器情況調整這幾個值為(當然我這邊是叢集所以我啟動300個已經足夠了):

pm.max_children = 300

pm.start_servers = 155

pm.min_spare_servers = 10

pm.max_spare_servers = 300

###################################################

(備註:如果不按這個公式計算做配置多多少少會出現寫問題,比如

seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 0 idle, and 34 total children    (這個很明顯是要你調節程式數)

child 1616 exited with code 0 after 619688.718148 seconds from start  (一下三個好像都是提示執行超時)

child 14636 exited on signal 15 (SIGTERM) after 269249.100189 seconds from star

request: “POST /test.php”) execution timed out (198.776247 sec), terminating

等等類似的報錯

如果是ngixn做的前端代理會出現當後端伺服器出現類似問題就會連線失敗提示沒線上的主機等等情況

no live upstreams while connecting to upstream, client

####################################################

本文轉自 小羅ge11 51CTO部落格,原文連結:http://blog.51cto.com/xiaoluoge/1562192,如需轉載請自行聯絡原作者


相關文章