Linux服务器内存告警_内存告警分析方法

5次阅读

内存告警关键看available是否低于总内存10%及swap中so是否持续>0;free -h查available、buff/cache、swap used;htop按m键查高res进程;cat /proc/meminfo查sunreclaim判断内核泄漏;dmesg和vmstat验证oom与换页。

Linux服务器内存告警_内存告警分析方法

内存告警不是“用了多少”,而是“还能不能稳住新任务”。关键看 available 值是否持续低于总内存的 10%,以及是否已开始动用 swap(尤其是 so 持续 >0)。

快速定位:从 free -h 开始,盯紧三个数

执行 free -h 后,跳过 used 和 free 列,直接看:

  • available:真正可分配给新进程的内存。若该值长期低于 500MB(小内存机器)或不足总内存 10%,说明实际可用资源紧张;
  • buff/cache:这部分通常可回收,高不等于问题,但若 available 极低而 buff/cache 也同步萎缩,说明缓存已被大量挤占,系统已在强压状态;
  • Swap used:只要非零且随时间增长,就表明物理内存已不够,系统被迫换页——这是性能拐点,必须干预。

追查元凶:按内存排序找活跃消耗者

运行 htop(没装可 yum install htopapt install htop),按 M 键按 RES(实际物理内存占用)降序排列。重点关注:

  • RES 超过 500MB 且长期不释放的进程;
  • 同一服务多个实例(如 Java 应用)累计 RES 占比过高;
  • 用户为 root 但命令名异常(如 curlpythonnode 等脚本类进程),这类常因逻辑缺陷导致内存缓慢爬升。

辅助命令:ps aux --sort=-%mem | head -10 可快速列出内存占用 Top10。

深挖内核层:确认是否内核对象泄漏

当 top/htop 显示用户进程内存正常,但 available 持续走低、Slab 占用飙升,需检查内核内存:

  • 执行 cat /proc/meminfo | grep -E "^(Mem|Slab|SUnreclaim)",关注 SUnreclaim 值(不可回收 slab)。若其超过 1GB 且随时间上涨,大概率存在内核对象泄漏;
  • 运行 slabtop -o(实时排序),观察 dentryinode_cachesock_inode_cache 等是否异常偏高;
  • 典型案例:旧版 curl + NSS 在高频 https 探测中会累积 dentry,不重启进程无法释放。

验证交换行为与OOM风险

内存告警常伴随 OOM Killer 启动,留下痕迹:

  • 执行 dmesg -T | grep -i "killed process",查看最近被终止的进程及触发原因;
  • 运行 vmstat 1 5,重点观察 si(swap in)和 so(swap out)列:连续几秒 >0 表示频繁换页,I/O 延迟将明显上升;
  • 检查 /var/log/messagesjournalctl -b | grep -i "out of memory",确认是否已有 OOM 事件记录。
text=ZqhQzanResources