Ubuntu中PHP-FPM進程管理技巧
PHP-FPM支持三種進程管理模式,需根據應用負載特點選擇:
pm.max_children
定義),適合負載穩定的生產環境,避免了頻繁創建/銷毀進程的開銷。pm.start_servers
、pm.min_spare_servers
、pm.max_spare_servers
),適合負載波動的場景,平衡資源利用率與響應速度。pm.process_idle_timeout
設置空閑進程存活時間),適合低流量場景,節省內存資源。/etc/php/{version}/fpm/pool.d/www.conf
,修改pm
參數即可切換模式。動態/靜態模式下,需合理配置以下參數以匹配服務器資源:
8192MB/50MB≈160
,需預留系統及其他服務內存)。pm.max_children
的25%-50%(如pm.max_children=50
,則設為12-25),避免啟動時占用過多內存。min_spare_servers=5
、max_spare_servers=35
),保持足夠的空閑進程以快速響應請求。systemctl
命令管理PHP-FPM服務,常用操作包括:sudo systemctl start php{version}-fpm
(啟動)、sudo systemctl stop php{version}-fpm
(停止)、sudo systemctl restart php{version}-fpm
(重啟)、sudo systemctl status php{version}-fpm
(查看狀態)、sudo systemctl enable php{version}-fpm
(開機自啟)。ps aux | grep php-fpm | grep -v grep
(排除grep自身進程)。sudo pkill -f php-fpm
(終止所有PHP-FPM進程)、sudo pkill -u www-data -f php-fpm
(終止指定用戶(如www-data)的PHP-FPM進程)。nice -n 10 php script.php
(以低優先級(10)啟動腳本,減少對系統的影響)、sudo renice 10 -p PID
(調整已運行進程(PID)的優先級)。/etc/php/{version}/fpm/pool.d/www.conf
中的request_slowlog_timeout
(如1s
,超過1秒的請求記錄慢日志)、slowlog
(如/var/log/php-fpm.slow.log
,慢日志路徑)、request_slowlog_trace_depth
(如20
,記錄調用棧深度),重啟服務后生效。www.conf
中設置pm.status_path = /status
),通過Nginx/Apache配置訪問路徑(如location /status { fastcgi_pass unix:/run/php/php{version}-fpm.sock; }
),查看進程數量、狀態(idle/active)、內存使用等信息。php.ini
文件,設置opcache.enable=1
(啟用)、opcache.memory_consumption=128
(內存大小,單位MB)、opcache.max_accelerated_files=4000
(緩存的文件數量)、opcache.validate_timestamps=0
(生產環境關閉文件時間戳檢查,提升性能)。php.ini
中設置memory_limit
(如128M
,限制單個進程內存使用)、max_execution_time
(如30s
,限制腳本執行時間)、max_input_time
(如60s
,限制請求數據解析時間),避免單個進程占用過多資源。fastcgi_pass
設置為Unix Socket(如unix:/run/php/php{version}-fpm.sock
),相比TCP Socket,Unix Socket無需經過網絡層,性能更高(延遲更低、吞吐量更大)。