内存告警先别急着加内存:用 free、vmstat、/proc/meminfo 三步看懂到底够不够
服务器一报内存告警,很多人第一反应就是加内存。其实 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 长期被大量占用:已经影响性能,尽快处理,别只靠清理缓存拖时间。先分清“缓存占用”和“真实不足”,再花钱加内存,这一步很多人都跳过了。
- 点赞
- 收藏
- 关注作者
评论(0)