首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

php-fpm.conf 核心參數深度解析:從進程管理到效能調優

     編輯:PHP 綜合知識

全域區塊

參數預設說明
pidrun/php-fpm.pid主進程 PID 檔路徑,建議啟用便於管理腳本讀取
error_loglog/php-fpm.log錯誤日誌路徑
log_levelnoticealert/error/warning/notice/debug,生產建議 notice
emergency_restart_threshold60間隔內 SIGSEGV/SIGBUS 達此數則優雅重啟
emergency_restart_interval60s上述統計時間窗
process_control_timeout0子進程接收主進程信號超時,0=不限制
daemonizeyes前景/背景執行,除錯改 no

Pool 區塊(可多 pool 隔離站點)

監聽設定

listen = 127.0.0.1:9000           # TCP
; listen = /run/php-fpm.sock      # Unix Socket(效能更高,同機通訊)
listen.backlog = -1               # -1 交給 OS,通常 511 或 65535
listen.allowed_clients = 127.0.0.1 # 僅允許本機 Nginx 連線,any=不限制
listen.owner = www
listen.group = www
listen.mode = 0660                # Socket 權限,TCP 模式忽略

進程管理模式:pm

模式適用場景關鍵參數
static專用高流量站點、記憶體充裕pm.max_children
dynamic共享主機、流量波動大pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers
ondemand低流量、間歇性存取pm.max_children, pm.process_idle_timeout

dynamic 參數調優公式

pm.max_children      = Total_RAM * 0.8 / Avg_Process_Memory
pm.start_servers     = CPU_Cores * 4
pm.min_spare_servers = CPU_Cores * 2
pm.max_spare_servers = CPU_Cores * 8

Avg_Process_Memory 可用 ps -o rss= -C php-fpm | awk '{sum+=$1} END {print sum/NR/1024 " MB"}' 估算。

請求生命週期控制

參數建議值說明
pm.max_requests1000~5000防記憶體洩漏,0=無限。第三方擴充套件洩漏時必設
request_terminate_timeout30s~60s單請求硬性超時,補足 php.ini max_execution_time 失效情況
request_slowlog_timeout5s~10s慢請求記錄閾值,配合 slowlog 定位效能瓶頸
slowloglog/$pool.log.slow慢請求日誌路徑,含完整呼叫堆疊

資源限制

rlimit_files = 65535   # 開啟檔案描述符上限,配合 ulimit -n
rlimit_core = 0        # core dump 大小,0=關閉

環境隔離

chroot = /var/www/site1   # 啟動後 chroot,提升安全性(需完整 rootfs)
chdir = /var/www/site1    # 啟動工作目錄
user = www
group = www

狀態與監控

pm.status_path = /fpm-status  # 訪問 /fpm-status?json 獲取即時狀態
ping.path = /ping
ping.response = pong

Nginx 配合:

location /fpm-status {
    allow 127.0.0.1; deny all;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

輸出重導向

catch_workers_output = yes  # stdout/stderr 導向 error_log,方便除錯

調優實戰清單

  1. 啟用 slowlog,定期分析 Top 10 慢請求。
  2. 觀察 pm.status_path 的 idle processes / active processes,調整 spare 參數。
  3. 若常見 502,檢查 request_terminate_timeout、Nginx fastcgi_read_timeout、PHP max_execution_time 三者關係。
  4. 記憶體持續增長 → 降低 pm.max_requests 或排查擴充套件洩漏。
  5. 高併發靜態檔案 → 改用 Nginx 直接服務,勿經 PHP-FPM。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved