Ubuntu中PHP-FPM进程管理技巧
PHP-FPM支持三种进程管理模式,需根据服务器负载场景选择:
pm.max_children定义),适用于负载稳定的场景(如高并发固定流量网站),避免了进程频繁创建/销毁的开销。pm.min_spare_servers/pm.max_spare_servers定义),适用于负载波动的场景(如日常流量有峰谷变化的网站),平衡资源利用率与响应速度。pm.max_children个),适用于低流量场景(如测试环境、小型博客),节省系统资源。pm.max_children:进程池最大进程数,需根据服务器内存计算(如每个PHP进程占用256MB内存,16GB内存服务器可设置为16*1024/256=64),避免设置过大导致内存耗尽。pm.start_servers:启动时的初始进程数,建议设置为pm.max_children的1/4~1/2(如pm.max_children=50,则设置为12~25),确保服务器启动后能快速处理初始请求。pm.min_spare_servers:最小空闲进程数,保证空闲时有足够进程处理突发请求(如设置为pm.start_servers的1~2倍)。pm.max_spare_servers:最大空闲进程数,避免空闲进程过多浪费资源(如设置为pm.max_children的1/2~3/4)。pm.max_requests:单个进程处理的最大请求数量(如设置为500~1000),达到后自动重启进程,防止内存泄漏(如脚本中存在未释放的资源)累积。request_terminate_timeout:单个请求的超时时间(如设置为30s),避免长时间运行的脚本(如死循环、复杂查询)占用进程资源,影响其他请求处理。slowlog = /var/log/php-fpm.slow.log(日志路径)、request_slowlog_timeout = 1s(慢请求阈值)、request_slowlog_trace_depth = 20(调用栈深度)。systemctl status php{version}-fpm查看PHP-FPM服务状态(如运行、停止、异常),通过php-fpm -t测试配置文件语法是否正确,避免配置错误导致服务无法启动。www.conf中的user和group为非root用户(如www-data),限制PHP-FPM进程的权限,防止恶意脚本访问系统敏感文件(如/etc/passwd)。listen = unix:/var/run/php/php{version}-fpm.sock)替代TCP端口(如listen = 127.0.0.1:9000),减少网络暴露风险;若必须使用TCP,需通过防火墙(如ufw)限制访问IP(如仅允许Web服务器IP访问)。opcache.enable=1开启PHP脚本字节码缓存,减少脚本解析和编译时间(如opcache.memory_consumption=128设置缓存大小为128MB,opcache.max_accelerated_files=10000设置最大加速文件数为10000),显著提高PHP执行效率。fastcgi_pass指向PHP-FPM的监听地址(如unix:/var/run/php/php{version}-fpm.sock);若使用Apache,需通过SetHandler指令将PHP请求转发给PHP-FPM(如SetHandler "proxy:unix:/var/run/php/php{version}-fpm.sock|fcgi://localhost"),确保两者通信正常。