一、故障现象
服务器配置:
腾讯云 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'
修复方案
-
调小最大子进程,设置最大请求后重启进程
bashvi /www/server/php/72/etc/php-fpm.confpm.max_children = 20
pm.max_requests = 500
-
增加交换空间
创建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
