进程管理是php-fpm性能的核心,需根据服务器资源(内存、CPU)合理配置:
dynamic(动态)模式,让php-fpm根据负载自动调整进程数量;若内存紧张,可选择ondemand(按需)模式(进程空闲超时后销毁)。pm.max_children:最大子进程数,需根据服务器内存计算(如每个PHP进程占用100MB内存,1GB内存服务器可设置为1000MB/100MB=10,留出系统和其他服务空间)。pm.start_servers:启动时的进程数,建议为pm.max_children的1/4~1/2(如pm.max_children=50,则设置为12~25)。pm.min_spare_servers/pm.max_spare_servers:空闲进程的最小/最大数量,建议为CPU核心数的1~2倍(如4核CPU设置为4~8),避免频繁创建/销毁进程。pm.max_requests:每个子进程处理的最大请求数(如500~1000),防止内存泄漏累积。OPcache可缓存PHP脚本的字节码,避免重复编译,显著提升执行效率:
sudo yum install php-opcache安装,编辑/etc/php.ini添加:[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128 # 缓存内存大小(MB,根据服务器调整)
opcache.interned_strings_buffer=8 # 内部字符串缓存
opcache.max_accelerated_files=4000 # 缓存文件数量
opcache.revalidate_freq=60 # 文件修改检查频率(秒)
0(实时检查文件修改),生产环境设为60以上(减少IO)。调整php.ini中的关键参数,提升脚本执行效率和资源利用率:
memory_limit(每个进程内存限制,如128M~256M,根据应用需求调整)、max_execution_time(脚本最大执行时间,如30~300秒,避免长时间阻塞)、max_input_time(请求数据解析超时时间)。file_uploads=On(允许上传)、upload_max_filesize(单个文件大小,如2M)、post_max_size(POST数据总大小,需大于upload_max_filesize)。display_errors(避免泄露敏感信息),开启log_errors(记录错误到error_log)。磁盘IO慢会导致php-fpm响应延迟,需针对性优化:
logrotate定期轮转php-fpm日志(如/etc/logrotate.d/php-fpm),避免日志文件过大占用磁盘空间:/var/log/php-fpm/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
postrotate
/bin/kill -USR1 `cat /var/run/php-fpm.pid 2>/dev/null` 2>/dev/null || true
endscript
}
/tmp)挂载为tmpfs(内存文件系统),减少磁盘IO;使用Redis/Memcached缓存常用数据(如数据库查询结果),降低磁盘读取频率。通过工具定位具体问题,针对性解决:
top(查看CPU/内存占用)、htop(更直观的资源监控)、vmstat 1(查看系统级IO、CPU使用情况)监控服务器状态。slowlog = /var/log/php-fpm/slow.log、request_slowlog_timeout = 5s),记录执行时间超过阈值的请求,通过日志分析慢函数(如数据库查询、外部API调用)。strace -p <PID>追踪问题进程的系统调用(如卡在数据库连接、文件读取),使用gdb查看调用栈(生产环境慎用)。php-fpm的性能常受数据库和应用层影响:
SELECT *、减少子查询),使用连接池(如PDO的ATTR_PERSISTENT)减少连接开销。curl_setopt($ch, CURLOPT_TIMEOUT, 10)),避免等待第三方服务响应阻塞进程。若单台服务器无法满足需求,可通过负载均衡分散流量:
fastcgi_pass指向php-fpm的socket或端口),处理静态资源(如图片、CSS),减轻php-fpm负担。upstream模块实现负载均衡(如轮询、IP哈希),提升整体并发处理能力。