You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP高请求过载致网站卡顿、Nginx 502错误,求配置优化方案

问题分析与修复方案

核心定位

从PHP-FPM日志可以明确:pm.max_children设置为100已被完全耗尽,新请求无法获取处理进程,这就是网站卡顿、Nginx 502错误的直接原因。服务器30GB内存、8核CPU未饱和,说明当前PHP-FPM进程参数未充分利用硬件资源,且可能存在请求阻塞问题。

分步修复建议

1. 调整PHP-FPM进程参数

计算合理的pm.max_children

先统计单个PHP-FPM进程的内存占用:

ps -ylC php-fpm --sort:rss

查看输出中RSS列的平均值(单位KB),用公式计算:
pm.max_children = (总内存 - 系统预留内存) / 单个PHP进程内存
比如预留4GB给系统/Nginx,剩余26GB,若单个进程占300MB,可设置pm.max_children = 80(26*1024/300≈88,取保守值80)。

修改PHP-FPM配置(如www.conf)

pm = dynamic
pm.max_children = 80  # 按计算结果调整
pm.start_servers = 16  # 建议设为CPU核心数的2倍
pm.min_spare_servers = 8
pm.max_spare_servers = 24
pm.process_idle_timeout = 10s

重启PHP-FPM生效:

systemctl restart php-fpm

2. 排查并优化慢请求

进程耗尽但资源未饱和,大概率是部分请求执行时间过长,占用进程不释放。

开启PHP-FPM慢日志

在www.conf中添加:

slowlog = /var/log/php-fpm/www-slow.log
request_slowlog_timeout = 5s  # 记录超过5秒的请求

分析慢日志

查看日志定位耗时代码(如慢SQL、外部API调用、循环逻辑),针对性优化:

  • 给数据库查询加索引
  • 异步处理非核心任务(如邮件推送)
  • 缓存高频查询结果

3. Nginx配套优化

调整超时参数,避免请求排队超时:

http {
    client_header_timeout 10s;
    client_body_timeout 10s;
    send_timeout 10s;
    keepalive_timeout 65;
    keepalive_requests 100;
}

location ~ \.php$ {
    fastcgi_connect_timeout 60s;
    fastcgi_send_timeout 60s;
    fastcgi_read_timeout 60s;
    # 原有fastcgi_pass等配置...
}

重启Nginx生效:

systemctl restart nginx

4. 长期性能优化

  • 启用OPcache缓存PHP opcode,减少重复编译:
    opcache.enable=1
    opcache.memory_consumption=256
    opcache.max_accelerated_files=10000
    opcache.revalidate_freq=60
    
  • Nginx配置静态资源缓存(如JS/CSS/图片),直接返回静态内容,不经过PHP-FPM
  • 考虑引入Redis做数据缓存,降低数据库查询压力

内容的提问来源于stack exchange,提问作者CCG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 08:56:00