进程池配置直接影响PHP-FPM的并发处理能力。需根据服务器CPU核心数和内存容量调整以下关键参数(配置文件通常位于/etc/php/版本号/fpm/pool.d/www.conf):
pm模式:优先选择dynamic(动态模式),可根据负载自动调整进程数;若流量稳定,也可用static(静态模式)固定进程数。pm.max_children:设置为CPU核心数×4(如4核CPU设为16),避免过多进程导致内存溢出。pm.start_servers:启动时的进程数,建议为pm.max_children的1/4~1/2(如pm.max_children=16时,设为4~8)。pm.min_spare_servers/pm.max_spare_servers:空闲进程的最小/最大数量,建议设为pm.start_servers的1~2倍(如pm.start_servers=4时,设为4~8),避免频繁创建/销毁进程的开销。pm.max_requests:每个子进程处理的最大请求数(如500~1000),防止内存泄漏(长期运行的进程可能积累未释放的内存)。OPcache可缓存PHP脚本编译后的字节码,避免每次请求都重新解析脚本,显著提升执行效率。需在php.ini中配置:
[opcache]
zend_extension=opcache.so # 启用OPcache扩展
opcache.enable=1 # 开启字节码缓存
opcache.memory_consumption=128 # 缓存内存大小(根据服务器内存调整,如1GB内存可设为128~256MB)
opcache.interned_strings_buffer=8 # 内部字符串缓冲区大小(8MB足够)
opcache.max_accelerated_files=4000 # 缓存的最大文件数(根据项目文件数量调整,如1万个文件设为8000)
opcache.revalidate_freq=60 # 文件修改后重新验证的时间间隔(秒,生产环境可设为0禁用检查)
opcache.fast_shutdown=1 # 快速关闭,提升脚本结束时的清理效率
启用后可通过phpinfo()函数确认OPcache是否生效。
调整Linux内核参数可提升PHP-FPM的并发处理能力和I/O效率:
/etc/security/limits.conf,添加:* soft nofile 65535
* hard nofile 100000
编辑/etc/sysctl.conf,添加:fs.file-max = 100000
net.core.somaxconn = 65535 # 套接字最大连接数
net.ipv4.tcp_max_syn_backlog = 65535 # SYN队列长度
net.ipv4.tcp_tw_reuse = 1 # 复用TIME-WAIT连接
net.ipv4.tcp_fin_timeout = 30 # TIME-WAIT超时时间(秒)
执行sysctl -p使配置生效。fastcgi_keep_conn on;(位于fastcgi_pass指令后),保持长连接,避免每次请求都重新建立连接。PDO::ATTR_PERSISTENT => true或MySQLi的mysqli_connect('p:host', ...)),减少数据库连接的开销。数据库查询慢是PHP-FPM运行慢的常见原因,需针对性优化:
SELECT *(只查询需要的字段),使用JOIN代替多个单独查询,减少子查询的使用。使用工具定位性能瓶颈,针对性解决:
top、htop查看CPU、内存使用情况;用vmstat 1查看系统负载、I/O等待时间;用ss -tulnp查看网络连接状态。pm.status_path = /status,通过Nginx/Apache访问/status页面,查看进程数、请求处理时间等信息。若软件优化后仍无法满足需求,可考虑:
serialize()函数,提升序列化/反序列化速度。