上一篇 下一篇 分享链接 返回 返回顶部

内存占用突然升高的真实排查过程:不是爆内存,而是PHP进程异常堆积

发布人:tianfen 发布时间:2026-06-23 16:50 阅读量:1072

今天在查看服务器状态的时候,发现一个比较明显的异常:内存占用突然升高。

而且不是缓慢增长,而是短时间内直接冲到80%以上。

网站虽然还能访问,但明显开始变慢,所以我马上进行了排查。

一、问题表现

当时的情况比较典型:

  • 网站可以打开,但加载变慢

  • 后台响应延迟增加

  • SSH登录没有卡死,但有延迟

  • 内存占用明显偏高

二、第一步:查看内存整体使用情况

先用基础命令确认:

free -m

结果显示:

  • 已用内存占比很高

  • 可用内存明显下降

  • swap开始被占用

👉 说明不是“瞬时波动”,而是持续占用

三、第二步:查看具体占用进程

继续查进程:

top

排序后发现一个明显问题:

👉 多个 PHP-FPM 进程占用内存较高

而且不是单个进程,而是“多个同时偏高”。

四、第三步:判断是不是网站访问导致

我先排除攻击因素:

  • 查看访问日志

  • 检查IP连接数

  • 没有异常暴涨请求

👉 基本可以排除攻击或流量异常

五、第四步:检查PHP-FPM状态

继续查看PHP进程状态:

ps aux | grep php-fpm

发现一个关键现象:

👉 PHP进程数量明显比平时多

而且部分进程长期未释放。

六、问题真正原因

进一步判断后发现原因:

👉 PHP-FPM进程没有正确回收
👉 某些请求执行时间过长
👉 进程持续堆积导致内存占用上升

简单来说就是:

请求没有及时结束,导致进程越来越多

七、临时处理方法

为了先恢复网站,我做了以下操作:

1. 重启PHP服务

systemctl restart php-fpm

2. 释放内存缓存

sync; echo 3 > /proc/sys/vm/drop_caches

3. 结束异常进程

手动kill掉占用较高的PHP进程

八、恢复效果

处理后效果比较明显:

  • 内存占用快速下降

  • 网站访问恢复正常

  • 后台响应速度恢复

  • swap占用逐渐消失

九、后续优化措施

为了避免再次出现,我做了几个调整:

  • 限制PHP-FPM最大进程数

  • 调整request超时时间

  • 开启慢请求日志

  • 优化部分耗时接口

十、这次问题的核心结论

这次问题本质不是“内存不够”,而是:

👉 PHP进程没有正常释放 + 请求执行过长导致堆积

📌 总结一句话

内存突然升高,大多数情况不是爆内存,而是:

👉 进程异常堆积导致资源持续占用

目录结构
全文