服务器内存爆满怎么办?从排查到解决一步到位

服务器内存爆满是新手站长最常遇到的故障之一。
网站打开缓慢、SSH操作卡顿、甚至直接宕机,往往都和内存耗尽有关。
本文按零基础也能直接执行的方式,帮你一步步解决问题。

先确认服务器到底是不是“爆满”

不要凭感觉判断。
登录服务器后,第一件事就是查看内存真实占用。
执行下面这条命令:

free -h

关注 availableused 两列。
如果 available 接近 0 或只有几十 MB,说明内存确实紧张。
另外注意 swap 的使用情况:如果 swap 也被大量占用,那说明物理内存早就撑不住了。

如果 free -h 显示的 used 很高,但 available 还有不少,那可能是 buffers/cache 占用的内存(Linux 会把空闲内存用作缓存)。
这时候不一定需要立即清理,先往下继续排查。

找到“吃内存”的进程

检查内存占用的主力工具是 top
直接输入:

top -o %MEM

这个命令会按内存使用率从高到低排序,最上面几个就是“罪魁祸首”。
常见的吃内存进程有:

  • MySQL / MariaDB:数据库程序,配置不当或查询量大会疯狂吃内存。
  • PHP-FPM:PHP 进程消耗,特别是配置了过多子进程。
  • Nginx / Apache:Web 服务器处理大量并发时也会占用较多内存。
  • Java 应用:如 Tomcat、Java 微服务,默认堆内存分配很高。

如果你不想用 top,也可以用 ps aux --sort=-%mem | head -10 只看前 10 名,输出更简洁。

临时释放内存:重启服务或清理缓存

方案一:重启占用高的服务

如果确认是某个服务(比如 MySQL)占用过高,且当前业务允许重启,可以直接重启该服务:

systemctl restart mysql

或者通过宝塔面板,在软件商店找到对应服务点击“重启”。
重启后,该服务占用的内存会重新分配,往往能释放大量内存。

方案二:清除系统缓存(不推荐频繁使用)

Linux 缓存数据可以用这个命令清理:

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

它会把 pagecache、dentries 和 inodes 缓存都清掉。
注意:这只是临时腾出可用内存,不会杀死任何进程
如果进程本身还在不断申请内存,很快又会爆满。
所以建议只在你需要临时腾内存来执行某个紧急操作时使用。

方案三:杀掉僵尸或异常进程

如果 top 里看到某个进程占用异常高,而且不是你的业务进程(比如挖矿病毒、垃圾爬虫),可以用 kill 杀掉:

kill -9 

PID 就是进程号,从 topps 里可以看到。
杀之前最好确认一下进程名,别误杀了系统核心进程。

从根本上解决:优化配置或升级内存

临时手段只能救急,如果频繁出现内存爆满,必须从根源上下手。

1. 调整 MySQL 配置

打开 MySQL 配置文件(通常位于 /etc/my.cnf/etc/mysql/my.cnf),找到 innodb_buffer_pool_size 参数。
这个参数决定 MySQL 使用多少内存做缓存。
对于 1GB 内存的服务器,建议设置为 200~300MB;
如果是 2GB 内存,可以设到 500~700MB。
修改后重启 MySQL 生效。

2. 优化 PHP-FPM 进程数

PHP-FPM 的配置通常在 /etc/php-fpm.d/www.conf/etc/php/7.4/fpm/pool.d/www.conf
重点调整 pm.max_childrenpm.start_servers

先算一下:你的 PHP 进程平均占用多少内存(通过 top 观察),然后预留一定空间给系统和其他服务。
例如每个 PHP 进程占 30MB,总内存 1GB,保留 300MB 给系统,剩下 700MB 最多开 23 个进程。

3. 添加 Swap 虚拟内存(临时方案)

如果物理内存真的不够用,可以增加 Swap 作为缓冲。
创建一个 2GB 的 Swap 文件:

dd if=/dev/zero of=/swapfile bs=1M count=2048
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

为了让开机自动挂载,要写入 /etc/fstab

echo '/swapfile none swap sw 0 0' >> /etc/fstab

不过 Swap 性能远低于物理内存,只是用来防止 OOM 杀进程而已。

避坑指南:新手常犯的错误

  • 别一上来就 free -m 看 used 很高就以为内存爆满。Linux 会把空闲内存拿去做 cache,这不算真正的占用。重点看 available
  • 不要频繁执行 drop_caches,这会影响磁盘 I/O 性能。
  • 不要随意 kill -9 系统进程(如 systemd、sshd),可能导致服务器脱管。
  • 不要在不检查进程的情况下直接重启服务器,重启后问题可能依旧,而且丢失未保存的数据。

效果验证

做完上述操作后,再次运行 free -h 查看内存变化。available 应该明显增大。
top -o %MEM 确认之前的“大内存”进程是否恢复正常。
如果业务访问正常,网页打开流畅,说明问题已解决。

常见问题解答

Q:清理完缓存后,内存很快就满了怎么办?
A:说明有进程一直在消耗内存,需要按第二步定位具体进程并处理。

Q:我使用的是宝塔面板,有没有更简单的方法?
A:宝塔面板首页有一个“资源监控”图表,可以直观看到内存走势。在“软件商店”里可以重启服务,在“计划任务”里可以设置定时释放内存脚本(但不推荐依赖自动释放)。

如果你正在处理服务器内存爆满,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。

分享到:
上一篇
服务器CPU 100%怎么排查?从入门到解决的全流程教程
下一篇
服务器磁盘满了怎么办?零基础排查清理与扩容完整教程
1
系统公告

高考专属福利来袭|凭准考证免费领香港 CN2 云服务器

值高考落幕之际,泽御云开启考生专属回馈 + 产品限时特惠双重活动,助力学子暑期学习建站 高考 考生专属福利 全体应届高考生,凭高考准考证即可免费申领【香港 CN2 轻量云服务器,4 核 4G AMD 处理器】,免费使用周期 30 天,可用于搭建个人站点、编程实操、技术实训,祝各位考生金榜题名,前程似锦! 泽御云资质齐全合规自营机房,线路覆盖香港 CN2、国内 BGP、内蒙电信、美国精品线路,售后全天候技术支持。 官方网站:www.zeyuyun.com,活动限时有效,优惠逾期不再保留。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意