CentOS + 宝塔服务器偶发 SSH、面板、网站全部无法访问排查记录(PHP-FPM 内存耗尽案例)

一、故障现象

服务器配置:

腾讯云 CVM

2核4G

CentOS 8.5

宝塔面板

PHP 7.2

MySQL

Nginx

故障表现:

网站后台无法访问

宝塔面板无法打开

SSH 无法连接

ping 正常

重启服务器后恢复

典型现象:

网络层正常,但是服务器应用层全部失去响应。

这种情况优先怀疑:

内存耗尽(OOM)

CPU 满载

磁盘 IO 堵塞

连接数耗尽

某个服务异常占满资源

二、排查原因

搜索 OOM
bash 复制代码
grep -Ei "oom|out of memory|killed process" /var/log/messages

说明 Linux 因内存不足杀进程

确认服务器资源情况
bash 复制代码
free -h

查看谁占用内存

bash 复制代码
ps aux --sort=-rss | head -30

能看到很多php-fpm: pool www,总共二十几个,共占用2G多,每个60m~120m不等

而php 配置:

pm.max_children=50,说明有请求还会占用新的内存空间

50*90MB ≈ 4.5G,超过服务器物理内存

检查 PHP-FPM 配置
bash 复制代码
cat /www/server/php/72/etc/php-fpm.conf

pm.max_children = 50

改为

pm.max_children = 20

这样20*90MB ≈ 1.8G,比较安全

查看 PHP 慢请求

可能由于长任务不释放,导致不断启动新php-fpm,导致过多进程占用过多内存,进而溢出,这里开启了php慢日志,超过30秒,会记录

bash 复制代码
cat /www/server/php/72/var/log/slow.log

统计慢请求入口

bash 复制代码
grep "script_filename" /www/server/php/72/var/log/slow.log \
| sort | uniq -c | sort -nr

查看具体文件内容

bash 复制代码
 nl -ba /www/wwwroot/21258_mini/application/api/controller/Base.php | sed -n '35,55p'
修复方案
  1. 调小最大子进程,设置最大请求后重启进程

    bash 复制代码
    vi /www/server/php/72/etc/php-fpm.conf

    pm.max_children = 20

    pm.max_requests = 500

  2. 增加交换空间

    创建2G:

bash 复制代码
dd if=/dev/zero of=/swapfile bs=1M count=2048

chmod 600 /swapfile

mkswap /swapfile

swapon /swapfile

永久启用:

bash 复制代码
echo '/swapfile swap swap defaults 0 0' >> /etc/fstab

检查:

bash 复制代码
free -h

总结

业务接口慢请求导致 PHP-FPM 进程堆积,在无 Swap 的4G服务器上触发资源耗尽,最终导致整台服务器不可用
慢请求 → PHP-FPM堆积 → 内存增长 → OOM
相关推荐
damoluomu2 天前
挑 PHP CMS 之前,先学会看它的协议
php
虎头金猫2 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
-梅2 天前
linux(8) 软硬链接
linux·运维·服务器
Wang's Blog2 天前
Java 项目实战: 外卖平台-文件下载与ServletOutputStream回写浏览器
服务器·项目开发
琥珀色糖2 天前
SimlpeHttp
linux·服务器
第十人i2 天前
Linux 日志管理系统:journald 配置与优化
linux·服务器
ITxiaobing20232 天前
IP 定位服务选型指南:从准确率到工程落地的技术考察
linux·服务器·网络
wuyk5552 天前
【Socket 进阶之路】第 9 章 Linux 网络服务量产稳定性优化|心跳保活、TIME_WAIT、SO_LINGER、内存池、断线重连、完整异常防护框架
linux·服务器·开发语言·网络·物联网
Julien20042 天前
Docker 容器存储原理(一)
linux·运维·服务器·ssh·学习方法
筝筝ba2 天前
GUI 测试之只读用户恢复BMC出厂设置
服务器