PHP-FPM 是什麼?
PHP-FPM 是 FastCGI 的進程管理器。
PHP-FPM 的特點
- 支持平滑停止、啓動的高級進程管理功能
- 動、靜態子進程產生
- 慢日誌,記錄腳本運行所導致的異常緩慢
- 可以監聽不同的端口和使用不同的 php.ini
PHP-FPM 的管理和配置
PHP-FPM 管理
master 主進程理解以下信號:
- INT,TERM 立刻終止
- QUIT 平滑終止
- USR1 重新打開日誌文件
- USR2 平滑重載所有 worker 進程並重新載入配置和二進制模塊
# 查看 php-fpm 用戶
ps aux | grep php-fpm
# 查看 php-fpm 進程 pid
ps -ef | grep php-fpm
# 啓動 php-fpm
php-fpm -D
# 關閉 php-fpm
kill -INT [pid]
# 重啓 php-fpm
kill -USR2 [pid]
ps
是展示當前進程的快照。
PHP-FPM 配置
/etc/php-fpm.d 文件夾中包含了所有進程池的配置,在主配置文件 /etc/php-fpm.conf 中有下面一行:
include=/etc/php-fpm.d/*.conf
php-fpm.conf 的主配置文件包含全局配置,子配置是不同進程池的配置,例如 www。
全局配置
# s 秒,m 分,h 小時,d 天
# 子進程在 emergency_restart_interval 設定的時間內收到該參數設定次數的 SIGSEGV 或者 SIGBUS退出信息號,則FPM會重新啓動
emergency_restart_threshold 10
# 平滑重啓的間隔時間:
emergency_restart_interval 1m
# 子進程接受主進程複用信號的超時時間
process_control_timeout 10s
進程池配置
# 接收 FastCGI 請求的地址
listen: 'ip:port', '/path/to/unix/socket'
# 設置進程管理器如何管理子進程
pm: static 固定數量, ondemand 進程在有需求時才產生, dynamic 動態設置
static 和 dynamic 配置
內存比較少,併發量不是很大的應用,可以考慮採用 dynamic 的方式,這樣可以控制 php-fpm 所消耗的總內存數。
在併發高或者流量波動大的情況下,使用 static 可以在高併發下獲得比 dynamic 更快的響應速度。
可配置進程數量 = php-fpm 可配置內存 / (php-fpm 子進程的內存佔用 * 1.2)