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
相关推荐
Huangjin007_4 分钟前
【Linux 系统篇(二十九)】文件(六):动静态库制作
linux·运维·服务器
guo_wen_qiang21 分钟前
云服务器redis主从复制-哨兵模式
运维·服务器·redis
可信时间戳31 分钟前
原创作品如何做版权认证申请?先备材料,再挑路径
服务器·音视频·可信时间戳·权利卫士
北城笑笑32 分钟前
Server 18 ,Nginx 双服务器 HTTP转HTTPS 代理实战( HTTP 地址换 HTTPS 域名 )
运维·服务器·前端·后端·nginx·http·https
程序员-Benothing34 分钟前
Linux磁盘IO性能分析:iostat、iotop、fio实战
linux·运维·服务器
I'mChloe40 分钟前
不再逐台装Docker:我用Ansible Playbook批量统一服务器环境
服务器·docker·ansible
LiaoWL1231 小时前
从零开始学 Linux(一):目录结构、常用命令与 VIM 编辑器上手
linux·运维·服务器
for_ever_love__1 小时前
LangGraph Checkpointer:持久化、断点续跑与多轮记忆
服务器·数据库·学习·持久化·langgraph·checkpointer·断点续跑
Data analyse4561 小时前
用户路径SQL按会话起止时间聚合的方法
大数据·服务器·前端·数据库·人工智能·sql·数据分析
我先去打把游戏先1 小时前
Git-Rebase使用指南-从原理到实战
服务器·git·嵌入式硬件·物联网·ubuntu