
在 WordPress 維運或 Web 開發中,PHP-FPM Pool 的連線數是伺服器關鍵性能指標,當網站遇到高流量或效能瓶頸時,了解如何在 RunCloud 主機環境下檢視與排查 PHP-FPM Pool 連線數成為 DevOps 或 WP 管理員的重要技能。
PHP-FPM Pool 與連線數邏輯
PHP-FPM(FastCGI Process Manager)能高效處理多個 PHP 請求,每個 Pool 會有獨立的進程與佇列設定,若連線過多未及時處理,常見的現象有 502/504 Gateway Timeout,或網站明顯緩慢。掌握連線數狀況有助及早預警與調整設定。
用 Nginx/Access log 排查壓力來源
首先可以從 Nginx 的存取日誌檢視流量與大量請求是否來自特定 IP 或路徑。
- 定位 RunCloud 網站根目錄與 log 路徑(通常在
/home/<user>/webapps/<site>/logs/) - 用
awk、sort、uniq快速過濾高頻 IP - 分析高頻請求路徑,找惡意攻擊或資源浪費
sudo tail -n 1000 /home/<user>/webapps/<site>/logs/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -20
sudo tail -n 500 /home/<user>/webapps/<site>/logs/access.log | awk '{print $7}' | sort | uniq -c | sort -nr | head -20
若有遭到單一 IP 瘋狂攻擊,建議立即透過 Nginx-rc 限速或防火牆阻擋,避免拖垮 PHP-FPM pool。
Nginx 配置查詢與測試
sudo nginx-rc -T | grep access_log
sudo journalctl -u nginx-rc --since "10 minutes ago" | tail -50
從 PHP-FPM 角度監看 Pool 連線數
PHP-FPM 自帶 Status Page,可即時觀察每個 Pool 的佇列長度與請求狀態,或直接從 Linux 層面查詢 Socket 連線數。
方法一:啟動並檢查 PHP-FPM status (需先允許)
- 確認 RunCloud 上 PHP-FPM pool conf 路徑(如
/etc/nginx-rc/conf.d/php73rc-<pool_name>.conf) - 編輯 pool 配置開啟 status_path,例如:
pm.status_path = /php-fpm-status
- 重載 PHP-FPM 並用 curl 撈取狀態:
sudo systemctl reload php8.2-fpm
curl -s http://localhost/php-fpm-status
檢視「active processes」、「listen queue」等關鍵行數據。
方法二:用 ss 直接查詢 Socket 最即時連線數
sudo ss -s
sudo ss -ant | grep 9000 | wc -l
如你的 pool 監聽在 unix socket,請查 /var/run/php/php8.2-fpm-<pool>.sock 的連線狀態:
sudo ss -xap | grep php8.2-fpm複合應用排查連線壓力來源
- 先用 Nginx access log 分析頂級攻擊來源 IP,並以 fail2ban/防火牆處理
- 以
ss監測 PHP-FPM socket 突增異常,搭配 status page 校正 - 確認 php-fpm pool 設定(/etc/nginx-rc/conf.d/php82rc-xxx.conf)與 max_children 設定合理
- 善用 journalctl 觀察 nginx-rc, php-fpm 異常日誌
常見陷阱與效能風險
- 不宜隨意提高 max_children,應根據伺服器 RAM 實際評估,否則易 OOM
- 長期高連線,須檢查是否為爬蟲 / 攻擊流量,避免資源被白白消耗
- 調整 php-fpm 設定前請備份原檔,勿在線直接重啟避免意外 downtime
- 檢查 nginx-rc 日誌時注意權限與 logrotate 設定,防止磁碟爆滿
常見問答
若 status page 無法啟用,還有替代方案嗎 ?
可以用 ss 指令查 unix socket,或觀察 php-fpm error log 了解阻塞情形。
php-fpm max_children 該如何設定 ?
依據單一 php 程序平均記憶體佔用,除總 RAM 適當預留給系統,建議留餘裕避免 swap。
日誌顯示有 IP 密集惡意請求怎麼辦 ?
先用 Nginx-rc 流量限制、fail2ban,必要時加入防火牆 DROP。
結論
在 RunCloud 管理的伺服器上,定期檢查 PHP-FPM Pool 連線數並分析壓力來源,有助維持 WordPress 等網站的高效與安全,多管齊下掌握 Nginx、PHP-FPM、系統連線狀態,才能真正做到主動防護與優化!