全域區塊
| 參數 | 預設 | 說明 |
| pid | run/php-fpm.pid | 主進程 PID 檔路徑,建議啟用便於管理腳本讀取 |
| error_log | log/php-fpm.log | 錯誤日誌路徑 |
| log_level | notice | alert/error/warning/notice/debug,生產建議 notice |
| emergency_restart_threshold | 60 | 間隔內 SIGSEGV/SIGBUS 達此數則優雅重啟 |
| emergency_restart_interval | 60s | 上述統計時間窗 |
| process_control_timeout | 0 | 子進程接收主進程信號超時,0=不限制 |
| daemonize | yes | 前景/背景執行,除錯改 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_requests | 1000~5000 | 防記憶體洩漏,0=無限。第三方擴充套件洩漏時必設 |
| request_terminate_timeout | 30s~60s | 單請求硬性超時,補足 php.ini max_execution_time 失效情況 |
| request_slowlog_timeout | 5s~10s | 慢請求記錄閾值,配合 slowlog 定位效能瓶頸 |
| slowlog | log/$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,方便除錯
調優實戰清單
- 啟用
slowlog,定期分析 Top 10 慢請求。
- 觀察
pm.status_path 的 idle processes / active processes,調整 spare 參數。
- 若常見 502,檢查
request_terminate_timeout、Nginx fastcgi_read_timeout、PHP max_execution_time 三者關係。
- 記憶體持續增長 → 降低
pm.max_requests 或排查擴充套件洩漏。
- 高併發靜態檔案 → 改用 Nginx 直接服務,勿經 PHP-FPM。