一、调整PHP-FPM进程池配置
进程池参数是影响PHP-FPM并发处理能力的核心。需根据服务器CPU核心数(nproc命令查看)和内存容量调整:
dynamic(动态调整)或ondemand(按需启动),避免static(固定数量)导致资源浪费或不足。pm.max_children:最大子进程数,建议设为CPU核心数×4(如4核服务器设为16),避免过多进程占满内存;pm.start_servers:启动时的子进程数,设为pm.max_children的1/4~1/2(如16核设为4~8);pm.min_spare_servers/pm.max_spare_servers:空闲进程的最小/最大数量,保持合理范围(如4~12),避免频繁创建/销毁进程的开销。request_terminate_timeout(如30s),防止长时间运行的脚本(如死循环)占用进程资源。二、优化OPcache字节码缓存
OPcache可缓存PHP脚本编译后的字节码,避免重复解析,显著提升执行效率。需在php.ini中启用并调整:
opcache.enable=1:开启OPcache;opcache.memory_consumption=128:缓存内存大小(MB),根据应用复杂度调整(如128MB~256MB);opcache.max_accelerated_files=4000:缓存文件数量,设为应用总PHP文件数的1.5倍(如1万文件设为15000);opcache.revalidate_freq=60:缓存验证频率(秒),设为60秒(平衡性能与代码更新及时性)。三、调整Linux系统内核参数
优化内核参数可提升系统并发处理能力,减少网络和I/O瓶颈:
ulimit -n 65535临时设置(重启失效),或在/etc/security/limits.conf中永久添加* soft nofile 65535; * hard nofile 65535;/etc/sysctl.conf中添加:net.core.somaxconn = 65535 # 监听队列最大长度
net.ipv4.tcp_max_syn_backlog = 65535 # SYN队列最大长度
net.ipv4.ip_local_port_range = 1024 65535 # 本地端口范围
net.ipv4.tcp_tw_reuse = 1 # 复用TIME-WAIT连接
net.ipv4.tcp_fin_timeout = 30 # TIME-WAIT超时时间(秒)
执行sysctl -p使配置生效。四、优化Web服务器与PHP-FPM通信
选择高效的通信方式可减少网络开销:
listen指令设为Unix socket(如listen = /run/php/php8.2-fpm.sock),相比TCP/IP通信,延迟更低、性能更好;fastcgi_keep_conn on;(启用持久连接),减少TCP握手次数。五、启用慢日志定位性能瓶颈
通过慢日志找出执行缓慢的脚本,针对性优化:
www.conf)中设置:slowlog = /var/log/php-fpm/slow.log # 慢日志路径
request_slowlog_timeout = 2s # 超过2秒的请求记录到慢日志
定期分析慢日志(如使用grep或专用工具),定位耗时操作(如复杂SQL查询、循环嵌套)并优化。六、代码与数据库优化
SELECT语句的WHERE条件字段),避免全表扫描;使用预处理语句(如PDO的prepare方法)防止SQL注入,同时提升查询效率;优化查询语句(如避免SELECT *,只查询所需字段)。七、系统级资源监控与维护
top(查看CPU/内存占用)、htop(可视化监控)、vmstat(查看系统整体性能)、php-fpm status(查看PHP-FPM进程状态)等工具,实时监控资源使用情况;/var/log/php-fpm/下的旧日志),避免磁盘空间耗尽;