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