温馨提示×

Ubuntu PHP-FPM为何卡顿

小樊
42
2026-07-13 20:22:34
栏目: 编程语言

Ubuntu 下 PHP-FPM 卡顿通常不是单一原因,而是 配置、资源、代码、系统 多个层面叠加。下面按最常见 → 较少见的顺序给你一个系统排查思路,基本能定位 90% 的问题。


一、最常见原因(优先排查)

1️⃣ PHP-FPM 进程数不够 / 配置不合理(最常见)

典型现象

  • 并发一高就卡
  • 请求响应时间突然变慢
  • 部分请求 502 / 504

检查

ps aux | grep php-fpm

关键配置(pool)

; /etc/php/*/fpm/pool.d/www.conf
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20

判断标准

  • max_children 太小 → 请求排队
  • max_children 太大 → 内存/CPU 打满

✅ 推荐估算:

max_children ≈ 可用内存 / 单个 php-fpm 进程内存

2️⃣ PHP 代码慢(数据库 / 外部接口)

常见原因

  • SQL 没索引 / 慢查询
  • 循环里查数据库
  • 调用第三方接口(无超时)
  • 文件 IO 过多

排查方法

top
htop

如果:

  • php-fpm CPU 高 → 代码问题
  • php-fpm CPU 低但卡 → IO / 网络 / 阻塞

✅ 建议:

  • 开启 slow log
slowlog = /var/log/php-fpm/www-slow.log
request_slowlog_timeout = 5s

3️⃣ MySQL / Redis 成为瓶颈

现象

  • PHP-FPM 卡但 CPU 不高
  • 大量 Waiting for query

排查

mysqladmin processlist

✅ 常见原因:

  • 没有索引
  • 锁表
  • Redis 阻塞(大 key)

二、系统层面原因

4️⃣ 内存不足(OOM)

检查

free -h
dmesg | grep -i oom

✅ 解决:

  • 降低 pm.max_children
  • 使用 pm = ondemand(内存敏感)

5️⃣ CPU 打满

top
  • php-fpm 占满 CPU → 代码或正则问题
  • 系统 CPU 高 → 进程太多

6️⃣ 磁盘 IO 瓶颈

iostat -x 1

✅ 常见原因:

  • session 文件
  • 大量写日志
  • 临时文件

✅ 优化:

  • session 存 Redis
  • 日志异步 / 关闭 debug

三、网络 & 架构问题

7️⃣ Nginx ⇄ PHP-FPM 配置问题

检查

fastcgi_pass unix:/run/php/php-fpm.sock;

✅ 常见问题:

  • socket 权限不对
  • backlog 太小
listen.backlog = 511

8️⃣ PHP-FPM 被攻击(爬虫 / CC)

现象

  • 请求量异常
  • 同一 IP 大量访问

✅ 排查

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head

✅ 解决:

  • Nginx 限流
  • 防火墙封 IP

四、Ubuntu 特有 & 环境原因

9️⃣ PHP 版本 / 扩展问题

  • PHP 7.x → 8.x 升级后卡
  • 某些扩展(opcache、xdebug)

✅ 检查

php -v
php -m

✅ 建议:

  • 生产环境 关闭 xdebug
  • 正确配置 opcache
opcache.enable=1
opcache.memory_consumption=128

五、快速自查清单(5 分钟定位)

✅ 按顺序执行:

  1. top → php-fpm 是否吃满 CPU / 内存
  2. free -h → 内存是否不足
  3. php-fpm slow log → 是否有慢请求
  4. nginx access log → 并发是否异常
  5. pm.max_children 是否合理

六、如果你愿意,我可以更精确帮你

你可以直接贴这几样(脱敏即可):

  1. Ubuntu 版本
  2. PHP 版本
  3. www.conf 的 pm 配置
  4. 服务器配置(CPU / 内存)
  5. 卡顿时 top 截图

我可以 直接帮你算一个最优 PHP-FPM 配置,而不是泛泛而谈。

0