内存只剩80MB,VPS就要加配置?Linux真正该看的是MemAvailable
有站长发来一张面板截图:2GB 内存的 VPS,只剩 80MB free。
第一句话通常是:“是不是该升级了?”
不一定。
Linux 会主动把暂时不用的内存拿去做文件缓存。它宁愿让“free”看起来很少,也不愿让宝贵的内存空着。网站代码、数据库读过的数据、日志和最近访问过的文件,都可能留在 page cache 里,等真正有程序需要内存时再回收。
所以,看到内存占用 90%,甚至看到 free 只有几十 MB,都不是单独下结论的理由。
真正应该问的是:这台机器还有多少内存可以在不交换的情况下给新程序用?它是否已经开始频繁 swap,或者已经出现进程被杀?
MemFree 和 MemAvailable 的区别先把三个数字分开:free、available、swap
执行 free -h 时,最容易被误读的是第一列 free。
它只表示此刻完全空闲、没有被内核拿去做任何用途的内存。Linux 内核文档中定义的 MemAvailable 则更接近普通站长真正关心的问题:估计有多少内存可供启动新应用,而不需要使用 swap。
因此,下面两种现场完全不同:
现场 A: free 很低,但 available 还有几百 MB 甚至 1GB,swap 没增长,网站响应正常。这里大量内存可能只是缓存,未必需要动。
现场 B: available 持续很低,swap 已经在增长,PHP、数据库或 Java 进程响应越来越慢。这里才是实际内存压力,继续等可能把延迟推高,甚至触发 OOM。
used 也不是单纯“某个程序吃掉的内存”。它包含内核、进程和缓存等多个部分。想知道谁真的在增长,要继续看进程和系统日志,而不是用一个总数去给所有问题判死刑。
什么时候“内存满了”是真的危险信号
我通常看四个信号是否同时出现。
1. MemAvailable 持续下降,而不是瞬间波动
一次备份、一次数据库导入、一次镜像构建都可能让 available 暂时下降。关键在于任务结束后能不能回升,以及是否每天都向下爬。
如果 available 一直贴着很低的水位,说明系统没有足够的回收空间,应当找出增长来源。
2. swap 在持续使用或不断增长
swap 不是“出现 1MB 就故障”的开关。Linux 可以把不活跃页面放到 swap,短时间出现少量使用并不一定有问题。
但对小规格 VPS,swap 持续增长往往会把性能问题放大:磁盘一忙,页面响应、SSH、后台任务都会开始拖。此时要结合 iowait 和磁盘延迟一起看,不能只把 swap 当成一个静态数字。
3. 内核或 systemd 日志出现 OOM 线索
如果服务突然退出、502、数据库无故重启,先查 dmesg 或 journalctl 中有没有 out of memory、killed process、oomd 等相关记录。
Linux 的 OOM 机制会在内存无法满足分配时选择目标进程杀掉;systemd-oomd 也可能在内存和 swap 压力导致系统明显变慢时介入。此时“重启后恢复了”不是真正结论,只是把现场清空了。
4. 某个进程的 RSS 或容器内存一直涨
用 ps、top、htop 或容器运行时的统计,观察是否有一个进程持续增长。WordPress + PHP-FPM、MySQL、Java、Node、爬虫任务、图片处理和备份压缩,都可能在小 VPS 上形成峰值。
这里重点是趋势。单次占用大不一定有问题;每小时多一点、从不回落,才像泄漏或配置失控。
真实内存压力的四个信号最容易踩的坑:为了让数字好看,手动清缓存
网上常见一种“优化”:执行 drop_caches,让 free 立刻变大。
这会让面板数字变漂亮,但它通常不是解决内存问题的办法。文件缓存是 Linux 正常性能机制的一部分;强行清掉缓存后,后续访问反而可能重新打到磁盘,短时间更慢。
除非你是在明确的测试场景中,并且知道这条操作会影响什么,否则不要把清缓存当作日常运维按钮。
同样不建议因为看到一次内存高峰,就盲目调大 swap 或一口气升级配置。swap 太小、太大、缓存策略、应用并发、数据库缓冲区和容器限制,都需要结合业务判断。用一个“万能参数”覆盖所有 VPS,最后往往只是把故障推迟。
先定位,再决定是优化还是升级
如果服务器确实有内存压力,处理顺序可以是这样的:
- 1. 记录问题发生时的
free -h、进程列表、swap 和日志; - 2. 找出峰值任务:备份、导入、定时任务、爬虫还是访问高峰;
- 3. 检查应用配置是否明显超过机器规格,例如 PHP-FPM 子进程、数据库 buffer、容器 memory limit;
- 4. 先削减不必要的并发与重叠任务;
- 5. 如果业务正常负载下 available 仍长期不足,再升级内存。
例如 1GB VPS 同时跑数据库、PHP-FPM、面板、监控、Docker 和多个站点,本身就很容易把容量吃穿。此时不是“Linux 缓存太贪”,而是业务组合已经超过预算。
反过来,2GB VPS 只是偶尔因为备份压缩冲到高位,可能更适合把备份放到低峰、限制压缩并发,或者把备份任务移到别处,而不是先为一次偶发峰值永久加规格。
从监控数字到升级决策的顺序一个能直接执行的判断表
你看到内存告警时,按下面的顺序看:
- •
free 低,但 available 仍充足:先别动,观察趋势; - •
available 低,但 swap 没用、服务稳定:查峰值任务与配置; - • swap 持续增长、页面变慢:把内存与磁盘 I/O 一起查;
- • 出现 OOM 或服务被杀:先保留日志,找被杀的进程和触发时机;
- • 某个进程持续增长:优先查该应用或容器的限制;
- • 正常业务长期没有可用内存:这才是升级配置的明确证据。
最后记住:Linux 把内存用起来,是为了让机器更快;Linux 没有内存可用,才是风险。
别被一个 free 数字吓到,也别等到 OOM 才承认机器不够。看 MemAvailable、看 swap、看日志、看趋势,这四步比“内存使用率”更接近真实世界。
关注公众号海报