Ubuntu 上 PHP-FPM 崩溃/频繁重启 通常不是单一原因,而是 资源、配置、代码或系统限制 叠加导致的。下面按最常见 → 较少见的顺序给你一个系统排查思路,基本能定位 90% 的问题。
现象
server reached pm.max_children检查
grep -R "max_children" /var/log/php*-fpm.log
解决 编辑 pool 配置:
/etc/php/8.x/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 ≈ 内存 / 单个PHP进程内存
现象
Allowed memory size exhausted检查
php -i | grep memory_limit
解决
memory_limit = 256M # 或更高
⚠️ 如果是程序问题(死循环、大数组),只加内存是掩盖问题。
现象
Out of memory检查
dmesg | grep -i oom
journalctl -k | grep -i oom
解决
pm.max_children现象
systemctl status php8.x-fpm
失败或 failed to start
检查
php-fpm8.x -t
常见错误:
user/group 不存在/var/log/php*-fpm.log
重点关键词:
segfaultcore dumpedmax_childrenexit signal/var/log/nginx/error.log
/var/log/apache2/error.log
常见:
connect() failed (111: Connection refused)upstream timed out现象
排查
php -m
可尝试:
Ubuntu 自带 PHP 有时有已知 bug。
✅ 推荐使用:
ppa:ondrej/php
现象
status=1/FAILURE检查
systemctl show php8.x-fpm | grep Limit
解决
# /etc/systemd/system/php8.x-fpm.service.d/override.conf
[Service]
LimitNOFILE=65535
LimitNPROC=65535
然后:
systemctl daemon-reload
systemctl restart php8.x-fpm
df -h
df -i
# 1. 看 PHP-FPM 状态
systemctl status php8.x-fpm
# 2. 看 FPM 日志
tail -n 100 /var/log/php*-fpm.log
# 3. 看系统 OOM
dmesg | tail
# 4. 看配置是否正确
php-fpm8.x -t
# 5. 看当前进程数
ps aux | grep php-fpm | wc -l
你可以直接贴出:
我可以帮你 直接给出最优配置参数,而不是泛泛而谈。