news 2026/6/22 20:11:34

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
主机监控指标解析—内存篇

一、内存监控

一.物理内存

这是最直观的内存指标,反映了物理硬件(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 飙升,系统卡顿。
    • 触发OOMKiller (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,排查驱动或大量文件系统操作。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 7:12:38

Keepalived详解:安装与高可用集群配置

Keepalived详解&#xff1a;原理、编译安装与高可用集群配置 在高可用架构中&#xff0c;避免单点故障至关重要。Keepalived正是为了解决这一问题而生的轻量级工具。本文将深入浅出地介绍Keepalived的工作原理&#xff0c;并提供从编译安装到实战配置的完整指南。 1. Keepaliv…

作者头像 李华
网站建设 2026/6/23 13:50:34

LangChain与AutoGPT:AI工作流引擎深度对比

LangChain与AutoGPT&#xff1a;AI工作流引擎深度对比 在智能助手逐渐从“问答机器人”演变为“任务执行者”的今天&#xff0c;一个核心问题浮现出来&#xff1a;我们究竟需要一个听命行事的工具&#xff0c;还是一个能独立思考的代理&#xff1f;这个问题的答案&#xff0c;…

作者头像 李华
网站建设 2026/6/23 8:13:32

Excalidraw代码贡献指南:如何参与开源社区开发

Excalidraw代码贡献指南&#xff1a;如何参与开源社区开发 在远程办公成为常态、敏捷协作愈发重要的今天&#xff0c;团队对轻量级可视化工具的需求从未如此迫切。传统的图表软件往往过于“规整”——线条笔直、颜色统一、风格冰冷&#xff0c;反而让头脑风暴变得拘谨。而当你…

作者头像 李华
网站建设 2026/6/21 0:10:07

LangChain-Chatchat本地部署与配置指南

LangChain-Chatchat 本地部署与配置实战指南 在企业知识管理日益依赖 AI 的今天&#xff0c;如何构建一个安全、可控且高效的私有化问答系统&#xff0c;成为不少技术团队关注的核心问题。尤其当涉及敏感文档、内部流程或客户数据时&#xff0c;将信息上传至公有云模型显然不可…

作者头像 李华
网站建设 2026/6/22 22:31:43

shared_ptr 快照用于安全地并发读取,无需拷贝

需求&#xff1a;A线程会修改T类型的变量x&#xff0c;B线程要读取x&#xff0c;由于x很大&#xff0c;B读取和操作的时候需要加锁&#xff0c;这样会占用很长的x的时间。解决办法&#xff1a;方法1&#xff1a;B线程先加锁拷贝x到x_copy&#xff0c;然后锁可以释放&#xff0c…

作者头像 李华
网站建设 2026/6/23 3:58:33

官方适配完的命令行ruby在鸿蒙PC上的使用方法

ohos-ruby 是为 OpenHarmony 平台编译的 Ruby 编程语言解释器。本文档详细介绍如何在鸿蒙PC上安装和使用官方适配完成的 Ruby 工具&#xff0c;包括 HNP 包的打包、安装、gem 包管理以及 Ruby 脚本的运行方法。 &#x1f4cb; 目录 一、项目概述二、为什么需要 HNP 包三、HNP …

作者头像 李华