linux系统内存资源排查

1、free -h和free -m

查看内存,以Gb或MB形式展示

图片

图片

  • 总计 (total):服务器安装的物理内存总大小(这里是 7.5GB)。

  • 已用 (used)系统当前真正被“进程”占用的内存。注意,这个数值不包含后面的“缓冲/缓存”。

  • 空闲 (free):完全没有被使用过的“纯净”空闲内存。

  • 共享 (shared):主要用于进程间通信(如 tmpfs 临时文件系统)占用的内存,通常占用很小,一般忽略。

  • 缓冲/缓存 (buff/cache):Linux 内核为了加快读写速度,将硬盘数据或待写入硬盘的数据提前加载到内存中占用的空间。这是 Linux 的优良特性,目的是利用空闲内存提升性能,而不是“被吃掉”了。

  • 可用 (available):⭐ 这是最重要的一个指标! 它表示在不启用交换分区(Swap)的情况下,实际还能分配给新应用程序的内存大小。它约等于 free + 部分可释放的 buff/cache

核心误区:为什么内存“已用”很高,但系统依然流畅?

很多新手看到 used 占用了 2.1GB,加上 buff/cache 占用了 4.4GB,会觉得内存快爆了(7.5GB 只剩 1GB 空闲)。
这是错误的解读!

正确的计算逻辑是:
真正的“程序占用” = 已用 (2.1GB)
“还能用的内存” = 可用 (5.0GB) (而不是看“空闲”那列的 1.0GB)

因为当你的新程序需要内存时,内核会立刻释放 buff/cache 中的一部分空间来满足需求。所以,只要 “可用 (available)” 数值还比较大,系统就没有内存压力。

available=free(去掉不可使用的部分)+buff/cache(可释放的部分)

第二行:交换分区 (Swap) 详解

  • 交换分区:当物理内存(Mem)不够用时,系统会把部分不活跃的数据挪到硬盘上的一块虚拟内存区域(Swap)。

  • 关键判断:如果这一行的 已用 数值持续很高,并且 Mem 行的 可用 数值接近 0,说明物理内存严重不足,系统正在频繁读写硬盘充当内存,这会导致服务器响应变得非常慢(卡顿)。如果 Swap 的 已用 为 0,说明内存十分充裕

实时刷新查看(每秒刷新一次)

watch -n 1 free -h

查看内存占用最高的前 10 个进程(排查谁在吃内存)

ps aux --sort=-%mem | head -10

一句话总结

1 free -h 的结果,直接盯住最后一行(Swap)的“已用”是否上涨,以及 Mem 行的“可用(available)”还剩多少。只要 available 足够大(比如大于总内存的 20%),就不必纠结 usedfree 的具体数字,因为 buff/cache 都是你的“后备军”。

2、看到 Swap used > 0 时,请不要恐慌。

  1. 先看 free -h 中的 ‌available‌ 是否充足(比如大于总内存的 20%)。
  2. 再看 vmstat 1 中的 ‌si/so‌ 是否为 0。
  3. 如果 available 充足且 si/so 为 0,则系统健康,Swap 的使用是内核的正常优化策略。
  4. si/so 持续活跃且系统变慢时,才需要进行深入的进程排查和资源扩容。
  5. available‌ 不充足(比如低于总内存的 10%)和Swap used 持续较高,则提示内存不足

 

vmstat命令

 

vmstat 1 是 Linux 系统中一个极为强大的实时系统监控命令。它的核心作用是每隔 1 秒输出一次服务器整体的运行状态,让你能动态地观察到 CPU、内存、磁盘 I/O 和系统进程的变化趋势。

free -h 只看“静态快照”不同,vmstat 1 提供的是“动态心电图”,非常适合用来排查间歇性卡顿瞬时负载过高的问题。

企业微信截图_17860044174106

1. 进程队列 (procs) —— 看“堵不堵车”

  • r (运行队列):⭐ 核心指标。表示正在运行或等待 CPU 的进程数。如果这个数字长期大于 CPU 核心数(比如 4 核 CPU 但 r 一直 > 4),说明 CPU 严重不足,任务在排队。

  • b (阻塞进程):表示正在等待磁盘 I/O(读写硬盘)或网络响应的进程数。如果这个数字持续很高,说明硬盘读写太慢,拖累了系统。

2. 内存与交换 (memory & swap) —— 看内存“紧不紧张”

  • swpd (交换内存使用量):如果这个数值很大且持续增长,说明物理内存不够用,系统正在频繁使用硬盘当内存。

  • si (换入) 和 so (换出):⭐ 极其重要的指标。分别表示从硬盘交换区读入内存,和从内存写出到硬盘的数据量(单位 KB/s)。只要 siso 不是 0,就说明内存已经成了严重瓶颈,系统在疯狂和硬盘做数据交换(即“抖页”),此时服务器响应会变得极其缓慢。

3. 磁盘读写 (io) —— 看硬盘“累不累”

  • bi (块读入)bo (块写出):表示从硬盘读取和写入的数据量(单位 KB/s)。如果这个数值非常高(比如持续 > 100MB/s),说明程序在大量读写硬盘数据。

4. CPU 占用 (cpu) —— 看计算资源“花在哪了”

  • us (用户态):运行应用程序(比如你的 AI 模型推理、数据库)消耗的 CPU 百分比。

  • sy (内核态):操作系统内核(比如管理进程、处理中断)消耗的 CPU 百分比。如果 sy 占比太高(超过 us),说明系统开销过大。

  • id (空闲):CPU 的空闲百分比。值越高说明越闲。

  • wa (I/O 等待):⭐ 核心指标。表示 CPU 空闲但正在等待硬盘读写完成的时间百分比。如果 wa 持续超过 20%,说明硬盘性能是当前最大的短板,程序运行慢主要赖硬盘。

总结

  • free -h:如果 可用 (available) 很低,而硬盘上的 交换 (Swap) 已经用了很多,内存不够,说明内存太小,东西堆到冰箱里了

  • vmstat 1

    • 如果 si/so (交换换入换出) > 0:立刻确诊,内存与硬盘正在疯狂倒腾数据,这是服务器卡顿的头号元凶。

    • 如果 wa (I/O等待) 很高(比如超过 20%):说明 CPU 大部分时间都在等硬盘把数据送到内存,硬盘太慢拖累了整个系统

    • 如果 r (运行队列) 很高,但 wa 很低:说明 CPU 本身算不过来,需要更强算力或 GPU 加速。

posted on 2026-08-06 15:48  泽一年  阅读(33)  评论(0)    收藏  举报

导航