温馨提示×

ubuntu php-fpm为何宕机

小樊
44
2026-09-22 15:52:46
栏目: 编程语言

在 Ubuntu 上 php-fpm 宕机(进程退出 / 不响应) 是非常常见的问题,通常不是“php 本身坏了”,而是资源、配置或依赖异常。下面按最常见原因 → 排查方法 → 解决方案来说明。


一、最常见原因汇总(按发生概率)

1️⃣ 内存不足(OOM Killer 杀掉 php-fpm)

最常见

表现:

  • php-fpm 突然消失
  • systemctl status php-fpm 显示 failed
  • 网站 502 / 503

查看是否被系统杀掉:

dmesg | grep -i "killed process"

grep -i "out of memory" /var/log/syslog

✅ 解决:

  • 减少 pm.max_children
  • 增加 swap
  • 优化 PHP 内存(memory_limit

2️⃣ php-fpm 配置错误

修改配置后未测试直接重启。

检查配置:

php-fpm8.1 -t

(版本按你实际,如 php-fpm7.4

✅ 解决:

  • 修正 www.conf
  • 不要写错 user / group / listen

3️⃣ socket / 端口冲突

Nginx / Apache 连不上 php-fpm。

常见错误:

connect() to unix:/run/php/php8.1-fpm.sock failed

检查:

ls -l /run/php/

✅ 解决:

  • php-fpm 没启动
  • socket 权限不对
  • nginx 用户不在 www-data

4️⃣ 子进程全部耗尽(pm 配置不合理)

表现:

  • 开始正常,访问量一高就宕
  • 日志出现:
pool www exhausted

www.conf 关键参数:

pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20

✅ 解决:

  • 根据内存调整
  • 公式参考:
max_children ≈ 总内存 / 单进程内存

5️⃣ PHP 代码致命错误(死循环 / 内存爆)

  • 脚本超时
  • 无限递归
  • 大文件处理

查看:

tail -f /var/log/php8.1-fpm.log

✅ 解决:

  • 优化代码
  • 设置合理 max_execution_time

6️⃣ 系统重启 / 未设置开机自启

systemctl is-enabled php8.1-fpm

✅ 解决:

systemctl enable php8.1-fpm

二、快速排查流程(推荐顺序)

# 1. 看服务状态
systemctl status php8.1-fpm

# 2. 看错误日志
journalctl -u php8.1-fpm -n 50
tail -n 100 /var/log/php8.1-fpm.log

# 3. 看是否被 OOM
dmesg | grep -i oom

# 4. 检查配置
php-fpm8.1 -t

# 5. 看资源
free -h
top

三、如果你愿意,我可以更精准帮你

你可以直接贴出:

  1. Ubuntu 版本
  2. PHP 版本
  3. php-fpm 错误日志
  4. nginx/apache 报错

我可以直接帮你定位是哪一条原因 + 给具体修改方案

0