PHP-FPM的进程管理参数直接影响资源占用,需根据服务器规格(内存、CPU核心数)调整:
pm 模式选择:优先使用 dynamic(动态模式),允许进程根据负载自动伸缩;若负载极低,可使用 ondemand(按需模式),仅在请求到来时创建进程。pm.max_children:设置最大子进程数,避免过多进程耗尽内存。计算公式:(服务器总内存 - 系统预留内存) / 单个PHP进程平均内存(如服务器有8GB内存,单个PHP进程约占用200MB,则pm.max_children可设为30-40)。pm.start_servers:启动时的进程数,通常设为 pm.max_children / 4(如pm.max_children=50,则设为12-13)。pm.min_spare_servers/pm.max_spare_servers:空闲进程的最小/最大数量,建议设为CPU核心数的1-2倍(如4核CPU,设为4-8),避免频繁创建/销毁进程。pm.max_requests:每个子进程处理的最大请求数(如500-1000),防止内存泄漏积累(长期运行的进程可能因内存泄漏占用越来越多内存)。代码问题是内存占用的根源,需通过以下方式优化:
IN语句),使用缓存(如Redis)存储频繁访问的数据,避免重复查询。gc_collect_cycles()函数,主动清理无引用的内存。OPcache可缓存编译后的PHP脚本,减少重复编译的开销,显著降低内存使用:
sudo yum install php-opcache安装,编辑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(禁用检查)
php -m | grep opcache确认OPcache已加载。限制单个脚本的资源使用,防止单个请求占用过多内存:
memory_limit:设置脚本最大内存使用量(如128M或256M),避免脚本无限占用内存(需根据应用需求调整,避免设置过低导致脚本崩溃)。max_execution_time:设置脚本最大执行时间(如30秒),避免长时间运行的脚本占用进程资源。通过监控工具实时查看PHP-FPM的资源使用情况,定位高负载根源:
top、htop命令查看PHP-FPM进程的内存、CPU占用;使用ps aux | grep php-fpm | sort -rn -k4 | head -20列出内存占用最高的20个PHP-FPM进程。request_slowlog_timeout = 5,单位:秒),分析慢请求的原因(如数据库查询慢、代码逻辑复杂)。active processes、memory usage等指标,设置告警阈值。rlimit_files = 10240),避免高并发时因文件描述符不足导致进程被终止。systemctl restart php-fpm定期重启(如每周一次),释放累积的内存(需在低峰期操作,避免影响服务)。