内存告警先别急着加内存:用 free、vmstat、/proc/meminfo 三步看懂到底够不够

举报
yd_246130537 发表于 2026/10/30 10:01:09 2026/10/30
【摘要】 服务器一报内存告警,很多人第一反应就是加内存。其实 Linux 的内存统计里有不少“看起来被占、实际可回收”的部分,先分清再决定,能省下不少钱。第一步:用 free 看真实可用量。先跑 free -h,重点看 available,而不是只看 used。Linux 会把空闲内存拿去做文件缓存,缓存占得越多,used 看起来就越高,但这部分在程序真正需要时会被立刻回收。判断标准很简单:avail...

服务器一报内存告警,很多人第一反应就是加内存。其实 Linux 的内存统计里有不少“看起来被占、实际可回收”的部分,先分清再决定,能省下不少钱。

第一步:用 free 看真实可用量。先跑 free -h,重点看 available,而不是只看 used。Linux 会把空闲内存拿去做文件缓存,缓存占得越多,used 看起来就越高,但这部分在程序真正需要时会被立刻回收。判断标准很简单:available 还很充裕,说明只是缓存吃得多,不必紧张;available 持续走低、接近 0,才是真的吃紧。顺手记下 total、used、free、buff/cache、available 五个数,后面两步要对照着看。

第二步:用 vmstat 看是不是在换页。跑 vmstat 1 5,重点看 si(换入)和 so(换出)两列。如果这两列长期不是 0,说明内存已经不够用,系统在频繁把数据搬到交换分区,服务变慢就是从这里开始的。偶尔跳一下不算问题,持续几十、上百才是信号。同时看一下 swap 那一行的总量和使用量:如果 swap 已经被用掉大半,说明压力已经持续一段时间了,只加缓存清理是解决不了的。

第三步:打开 /proc/meminfo 核对细节。grep -E ‘MemTotal|MemFree|MemAvailable|Buffers|Cached|SwapTotal|SwapFree’ /proc/meminfo 能看到 free 背后的原始数字。MemAvailable 是内核估算的“程序还能拿到多少”,比 free 更可信;Cached 加 Buffers 就是可回收的缓存部分。如果 MemAvailable 还很多,但 free 很小,基本就是缓存造成的假告警。反过来,如果 MemAvailable 也很小、swap 又在持续增长,那就不是假告警:先看是谁在吃内存,ps aux --sort=-%mem | head 列出前几名,再决定是优化程序、调大内存,还是把不常用的服务停掉。

判断流程:available 充足、si/so 基本为 0:不用加内存,先观察。available 走低、si/so 持续大于 0:先找吃内存的进程,确认是泄漏还是正常增长,再决定加内存还是修程序。swap 长期被大量占用:已经影响性能,尽快处理,别只靠清理缓存拖时间。先分清“缓存占用”和“真实不足”,再花钱加内存,这一步很多人都跳过了。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。