主机监控指标解析—内存篇

56 阅读5分钟

一、内存监控

一.物理内存

这是最直观的内存指标,反映了物理硬件(RAM)的使用情况。

1.1核心指标详解

命令:free -h 或 cat /proc/meminfo

  • 指标含义
指标名称对应字段含义详解作用与分析
TotalMemTotal物理内存总大小。硬件上限,评估资源基准。
UsedMemUsed已用内存。包含应用程序使用、内核使用(Slab/Vmalloc)等。注意:单纯看 Used 高不代表有问题,因为 Linux 倾向于把空闲内存用作缓存。
Buff/CacheBuffers/Cached缓冲/缓存。Buffers: 块设备(磁盘)读写缓冲。 Cached: 文件系统缓存(加速文件读取)。可回收资源。当应用需要内存时,这部分通常会自动释放。如果过低,会导致磁盘 I/O 变高,系统变慢。
AvailableMemAvailable可用内存。真正还可以分配给新进程的估算值(Free + 可回收的 Buff/Cache)。判断内存瓶颈的核心指标。比 Free 更具参考价值。

作用:用来判断系统整体资源是否紧张,是否会发生 OOM(内存溢出杀进程)。

1.2警报与判断

  • 警报阈值

    • 警告 (Warning) :Available < 20%
    • 严重 (Critical) :Available < 10%
  • 典型场景

    • Java 应用堆内存(Heap)设置过大,接近物理内存上限。
    • 数据库(Redis/MySQL)缓存配置不当。
    • 内存泄漏(Memory Leak):应用程序申请内存后不释放,Available 持续下降。
  • 后果

    • 系统尝试回收 Cache,导致磁盘 I/O 飙升,系统卡顿。
    • 触发 OOM Killer ( Out of Memory ) ,Linux 强制杀掉占用内存最高的进程(通常是业务进程)。

二.交换分区

Swap 是磁盘上的空间,当物理内存不足时,操作系统会将内存中不活跃的数据暂时“交换”到磁盘上。

2.1核心指标详解

命令:free -h, vmstat

  • 指标含义
指标名称含义详解作用与分析
Swap UsedSwap 空间已使用的量。如果物理内存不足,系统开始大量使用 swap,会导致性能下降。 误区提醒:Swap Used 高不一定代表系统卡顿。如果是一些僵尸进程占用了 Swap 且不再活跃,其实是好事(腾出了物理内存给活跃进程)。
Swap In/Out (si/so)换入/换出速率。si: 从磁盘读回内存。so: 从内存写入磁盘。真正的性能杀手。如果 si/so 持续大于 0,说明内存严重不足,系统正在疯狂进行磁盘读写(抖动),导致极度卡顿。

2.2 警报与判断

  • 警报阈值

    • Swap 使用率:> 20%-50%(作为预警,提示物理内存可能不足)。
    • Swap 频繁活动 (关键)siso 速率持续 > 0 KB/s(持续 1分钟以上)。
  • 后果

    • 系统响应极慢,SSH 甚至无法连接。
    • 业务接口超时。

三、 虚拟内存与提交

Linux 的内存申请是“超卖”模式,理解这里才能解释“为什么物理内存还有空闲,程序却报无法分配内存”。

3.1 核心指标详解

命令cat /proc/meminfo, sar -r

指标名称含义详解作用与分析
CommitLimit内存提交上限。计算公式:Swap Total + (Physical RAM * vm.overcommit_ratio)。系统能承诺给所有进程分配的虚拟内存总量上限(在 Strict Overcommit 模式下)。
Committed_AS已提交地址空间。所有进程申请的虚拟内存总和(Process A申请 + Process B申请...)。重点:如果 Committed_AS 远大于物理内存,说明应用开启了大量内存申请(如 Java Xmx 设置很大),虽然暂时没用满,但存在 OOM 风险。
VmallocUsed内核虚拟内存。内核为了分配大块连续逻辑地址而使用的空间。排查内核问题:主要用于监控内核模块(如驱动、网络协议栈)是否有内存泄漏。真正需要警惕的是:如果 VmallocUsed 持续异常增长且不释放。

3.2 警报与判断

  • 警报阈值

    • Committed_AS > CommitLimit * 90% (如果关闭了 Overcommit)。
    • VmallocUsed 出现异常的持续大幅增长。
  • 场景

    • 虚高申请:程序申请了 10G 内存但只用了 100M。物理内存看着很空,但 Committed_AS 很高。
    • 内核泄露VmallocUsed 暴涨,通常是驱动 Bug。

四、 内存健康度指标 (Page Faults)

除了看大小,还要看内存的“分配效率”。

4.1 指标详解

来源命令vmstat -s , sar -B

指标名称含义详解作用与分析
pgfault (Minor)次缺页异常。进程申请内存时,数据在物理内存中只是没建立映射。正常现象。程序启动或申请内存时都会发生,无需惊慌。
pgmajf (Major)主缺页异常。进程需要的数据不在内存中,必须从磁盘(Swap 或文件)读取。危险信号。如果此指标飙升,说明内存严重不足,正在发生频繁的磁盘 I/O 阻塞。

五、 总结与排查速查表

现象可能原因建议排查工具解决思路
Available 低,Buffer/Cache 低应用程序真的把内存吃光了top (按 M 排序), pidstat -r检查 Java 堆配置、检查是否存在内存泄露。
Available 低,Buffer/Cache 高正常现象,系统在缓存文件free -h无需处理,除非 Swap 开始频繁活动。
Swap Used 高,si/so 为 0历史遗留数据占用了 Swapvmstat 1暂时无视,说明那些进程是不活跃的。
Swap Used 高,si/so 持续高物理内存严重不足,系统抖动vmstat, iotop紧急!扩容内存或杀掉占用高的进程。
Used 高,但找不到进程内核 Slab 或 Vmalloc 占用slabtop, /proc/meminfo检查 Slab 和 VmallocUsed,排查驱动或大量文件系统操作。