进程管理是PHP-FPM优化的核心,需根据服务器资源(CPU、内存)调整进程池参数,平衡并发处理能力与资源消耗。
dynamic模式(动态调整进程数),适合大多数场景;若服务器长期闲置,可使用ondemand模式(按需启动进程),减少空闲进程占用。pm.max_children:设置为CPU核心数的2-4倍(如4核CPU设为8-16),或通过“服务器总内存÷单个PHP进程平均内存”计算(如16GB内存、每个进程100MB,则设为160);pm.start_servers:启动时的进程数,建议设为pm.max_children的1/4-1/2(如pm.max_children=50,则设为10-25);pm.min_spare_servers/pm.max_spare_servers:最小/最大空闲进程数,建议设为pm.start_servers的1-2倍(如pm.start_servers=10,则设为5-20),避免频繁创建/销毁进程。合理的内存分配与超时控制能防止资源浪费和请求阻塞。
memory_limit(如128M或256M),根据应用需求设置(如小型应用128M足够,大型应用可适当增加),避免单个脚本占用过多内存。request_terminate_timeout:设置请求最大执行时间(如30s),防止长时间运行的脚本拖垮服务器;max_execution_time:PHP脚本最大执行时间(如30),与request_terminate_timeout保持一致或略小。OPcache是PHP代码缓存扩展,能缓存预编译的字节码,减少脚本解析时间,显著提升性能。
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 ; 文件检查频率(秒)
systemctl restart php-fpm),并通过phpinfo()验证是否开启。合理的Nginx配置能减少FastCGI通信开销,提升请求处理效率。
fastcgi_buffers(缓冲区数量与大小)和fastcgi_buffer_size(缓冲区大小),如:fastcgi_buffers 8 16k; ; 8个16KB的缓冲区
fastcgi_buffer_size 32k; ; 缓冲区大小
fastcgi_read_timeout(如300s),避免因后端处理慢导致Nginx超时。fastcgi_pass指向正确的PHP-FPM socket(如unix:/var/run/php/php7.4-fpm.sock)。通过慢日志定位性能瓶颈,通过监控掌握服务器状态。
slowlog = /var/log/php-fpm/www-slow.log ; 慢日志路径
request_slowlog_timeout = 10s ; 慢请求阈值(秒)
log_level = notice,减少不必要的日志记录(如调试信息)。htop(查看CPU/内存使用)、iostat(查看磁盘IO)、Prometheus+Grafana(可视化监控)等工具,定期检查PHP-FPM的active processes(活跃进程数)、request duration(请求耗时)等指标。xdebug(调试工具),在php.ini中注释相关行(如;zend_extension=/path/to/xdebug.so),减少资源消耗。Redis或Memcached,缓存数据库查询结果或频繁访问的数据,减少数据库压力(如$redis->set('key', $data, 60))。systemctl restart php-fpm释放内存,解决潜在的内存泄漏问题(建议在低峰期操作)。