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无需经过网络层,性能更高(延迟更低、吞吐量更大)。