Linux Linux运维sar性能监控CPU内存I/O

Linux sar 系统监控命令速查指南

| 7 分钟阅读 | --

前言

sar 是 Linux 下非常实用的系统活动统计工具,适合在排查卡顿、负载异常、I/O 压力和内存压力时快速查看系统状态。

它既可以直接查看当前统计结果,也可以把采样结果保存到文件,方便后续回看。需要注意的是,sar -o 不是“监控 CPU”的参数,而是把采样数据写入文件;如果你想持续采样并保存,应该使用类似下面的写法:

sar -o datafile 1 8 >/dev/null 2>&1 &
sar -f datafile

如果只是临时看当前状态,直接用对应的 sar 选项就可以。


一、先看 CPU

sar -u

这个命令会显示 CPU 从系统启动到当前的平均使用情况,适合先看整体趋势。

如果想按时间间隔采样,可以这样:

sar -u 1 8

重点关注这些指标:

指标含义
%user用户态 CPU 占用
%system内核态 CPU 占用
%iowaitCPU 等待 I/O 的时间
%idleCPU 空闲比例

判断思路:

  • idle 高,说明 CPU 本身通常不忙。
  • idle 高但系统仍然慢,优先检查 iowait、内存压力、swap、blocked 和磁盘 I/O。
  • idle 持续很低,尤其长期低于 10%,说明 CPU 资源可能已经成为瓶颈。

二、监控文件表、inode 和终端

sar -v 3 5

-v 用来查看 inode、文件句柄和伪终端等内核表状态。适合排查打开文件数过多、会话过多,或者目录缓存变化明显的场景。

常见指标如下:

指标含义
dentunusd目录缓存中未使用的缓存条目数
file-nr系统当前使用的文件句柄数
inode-nr系统当前使用的 inode 句柄数
pty-nr系统当前使用的伪终端数量

怎么理解这些值:

  • file-nr 持续偏高时,要结合 lsofulimit -n 和进程打开文件数一起看。
  • inode-nr 偏高时,说明系统 inode 使用量大,通常和大量文件、目录或短生命周期文件相关。
  • pty-nr 偏高时,通常意味着终端会话、SSH 会话或 shell 连接较多。
  • dentunusd 更适合看目录缓存是否活跃,不要直接把它理解成“目录 inode 数”。

如果这些值明显异常,可能带来的问题包括:

  • 打开文件过多,触发文件描述符限制。
  • 会话过多,增加系统资源消耗。
  • 目录缓存频繁抖动,影响文件系统访问效率。

三、监控内存

sar -r 2 4

-r 用来查看内存利用率。判断内存压力时,不要只盯着“已用内存”,更要看系统是否还能顺利为新任务分配可用内存。

重点关注:

指标含义
kbavail可用于启动新应用的可用内存估算
kbmemused已使用内存
%memused内存使用率
kbcached页面缓存
kbcommit当前工作负载需要的内存估算
%commit当前负载对 RAM+swap 的承诺比例

判断思路:

  • kbavail 很低时,说明真正可用内存不多了。
  • kbcommit%commit 长期很高时,说明系统已经“预留”出去的内存很多,后面再来新的内存申请就容易吃紧。
  • 如果 CPU 不是特别忙,但系统响应慢,配合 sar -r 看内存是否已经吃紧,会比只看 idle 更有帮助。

四、监控 I/O

sar -b 2 1

-b 反映的是系统层面的 I/O 和传输速率,适合先判断磁盘是否忙、读写是否异常。

常见指标:

指标含义
tps每秒发往物理设备的传输次数
rtps每秒读请求数
wtps每秒写请求数
bread/s每秒读取的数据量
bwrtn/s每秒写入的数据量

如果系统卡顿但 CPU 不高,sar -b 常常能帮你先确认问题是不是落在磁盘 I/O 上。


五、监控队列长度和负载

sar -q 3 6

-q 适合看运行队列、负载和阻塞任务数量。它对判断“系统为什么响应慢”很有帮助。

常见指标:

指标含义
runq-sz运行队列长度,表示正在运行或等待运行的任务数
plist-sz任务列表中的总任务数
ldavg-11 分钟负载均值
ldavg-55 分钟负载均值
ldavg-1515 分钟负载均值
blocked当前因 I/O 等待而阻塞的任务数

判断思路:

  • runq-sz 高,说明排队任务多。
  • blocked 高,通常意味着 I/O 等待明显。
  • ldavg-1 长期高于 CPU 核心数,且伴随 D 状态进程增多,往往要继续往 I/O 或内存方向排查。

六、监控内存交换页

sar -W 3 2

-W 用来查看 swap 进出情况。

指标含义
pswpin/s每秒换入的 swap 页面数
pswpout/s每秒换出的 swap 页面数

判断思路:

  • pswpin/spswpout/s 持续不为 0,说明系统正在发生交换。
  • 如果 swap 活跃,同时系统又慢,通常说明内存压力已经影响到性能了。

七、监控磁盘设备

sar -d 3 2 -p

-d 可以按块设备查看 I/O 细节,适合定位哪个磁盘更忙、队列是否积压。

常见指标:

指标含义
tps每秒提交给设备的 I/O 次数
rkB/s每秒读取的 KiB 数
wkB/s每秒写入的 KiB 数
areq-sz平均 I/O 请求大小
aqu-sz平均队列长度
awaitI/O 请求平均等待时间,包含排队和服务时间
%util设备忙碌时间占比

几点建议:

  • await 高,说明请求等待时间变长。
  • %util 接近 100% 时,单队列串行设备通常已经接近饱和。
  • 旧资料里常见的 svctm 在新的 sar 输出里通常不再是重点,实际排查更建议看 await%util
  • 对 RAID 或现代 SSD 来说,%util 接近 100% 不一定完全等于“性能已经到顶”,要结合设备类型一起判断。

八、实战建议

排查时可以按这个顺序走:

  1. 先用 sar -u 看 CPU。
  2. 如果 CPU 看起来不忙,但系统仍然卡,再看 sar -qsar -rsar -W
  3. 如果怀疑磁盘,直接看 sar -bsar -d
  4. 如果怀疑文件句柄、目录缓存或终端会话异常,再看 sar -v

简单来说,sar 的价值不在于单个命令,而在于把 CPU、内存、I/O、队列和文件表放到同一条排查链路里看。这样你能更快判断系统到底卡在 CPU、内存还是磁盘上。