Nginx PHP FPM集群不跑滿

2021-08-02 19:47:26 字數 990 閱讀 9208

伺服器配置架構

硬體:

nginx:4核4g,外網200m

php-fpm:4核4g*8臺

軟體:

nginx:1.2.10

php:5.6.30

出現的問題

使用ab進行壓力測試時,壓力測試的結果偏低(1200req/s)。nginx負載以及頻寬都偏低,各php-fpm節點占用也偏低,檢視php-fpm的status,其中max active processes只有50多。

php-fpm的配置:

pm = dynamic

pm.max_children = 512

理論上max_children應該能跑滿512個程序,可是現實情況並沒有這麼理想。觀察後發現,max listen queue剛好到達128後就沒有新的請求進入,檢視nginx的access_log發現,壓力測試後面請求的php-fpm節點都集中同一臺伺服器了並沒有輪流請求每一台伺服器。

因此,應該是nginx在放到前面幾台php-fpm伺服器後發現佇列已經滿了接收不了新的請求,於是把它當做是已經宕機的伺服器,列到失敗列表後指定時間後重試,可是實際上php-fpm只需要很短的時間就把佇列裡面的任務處理完成。因此考慮把佇列加大避免太早出現佇列滿載。

解決方案

根據php-fpm.cnof中的描述,max listen queue的大小受backlog的大小限制,因此需要修改系統的backlog大小從而使佇列長度更大:

sysctl -w net.core.netdev_max_backlog = 65535

sysctl -w net.ipv4.tcp_max_syn_backlog = 65535

sysctl -w net.core.somaxconn = 65535

sysctl -p

修改後重啟php-fpm即可以看到max listen queue大小為65535

效果 通過access.log檢視結果,請求均能平均分發到各台伺服器中。

刪庫不跑路

2020年2月23日,微盟員工賀某登入公司伺服器將微盟伺服器內資料全部刪除。導致300餘萬使用者無法正常使用該公司saas產品,造成公司經濟損失超10億。2020年8月26日,思科前員工sudhish kasaba ramesh非法入侵思科公司的雲基礎設施,並破壞大量資源。導致公司456個webex...

nginx php fpm安裝手記

www 將www加入www組並禁止www登入shell 編譯前編輯src core nginx.h找到 define nginx version define nginx version define nginx ver define nginx var 將上邊資訊替換為你想替換的資訊,便於隱藏ng...

nginx php fpm 執行原理

目錄 cgicgi工作原理 fastcgi php fpm php內建的一種fast cgi 請求步驟 common gateway inte ce 公共閘道器介面 請求模式 web brower 瀏覽器 通過http協議傳輸 http server 伺服器nginx apache cgi prog...