RunCloud 上如何查看與排查 PHP-FPM Pool 連線數與來源

PHP-FPM Pool
PHP-FPM Pool

在 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 或路徑。

  1. 定位 RunCloud 網站根目錄與 log 路徑(通常在 /home/<user>/webapps/<site>/logs/
  2. awksortuniq 快速過濾高頻 IP
  3. 分析高頻請求路徑,找惡意攻擊或資源浪費
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 (需先允許)

  1. 確認 RunCloud 上 PHP-FPM pool conf 路徑(如 /etc/nginx-rc/conf.d/php73rc-<pool_name>.conf
  2. 編輯 pool 配置開啟 status_path,例如:
pm.status_path = /php-fpm-status
  1. 重載 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

複合應用排查連線壓力來源

  1. 先用 Nginx access log 分析頂級攻擊來源 IP,並以 fail2ban/防火牆處理
  2. ss 監測 PHP-FPM socket 突增異常,搭配 status page 校正
  3. 確認 php-fpm pool 設定(/etc/nginx-rc/conf.d/php82rc-xxx.conf)與 max_children 設定合理
  4. 善用 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、系統連線狀態,才能真正做到主動防護與優化!

Please rate Stellar
0 / 5 5 Votes 5

Your page rank: