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 占用 |
%iowait | CPU 等待 I/O 的时间 |
%idle | CPU 空闲比例 |
判断思路:
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持续偏高时,要结合lsof、ulimit -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-1 | 1 分钟负载均值 |
ldavg-5 | 5 分钟负载均值 |
ldavg-15 | 15 分钟负载均值 |
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/s、pswpout/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 | 平均队列长度 |
await | I/O 请求平均等待时间,包含排队和服务时间 |
%util | 设备忙碌时间占比 |
几点建议:
await高,说明请求等待时间变长。%util接近 100% 时,单队列串行设备通常已经接近饱和。- 旧资料里常见的
svctm在新的sar输出里通常不再是重点,实际排查更建议看await和%util。 - 对 RAID 或现代 SSD 来说,
%util接近 100% 不一定完全等于“性能已经到顶”,要结合设备类型一起判断。
八、实战建议
排查时可以按这个顺序走:
- 先用
sar -u看 CPU。 - 如果 CPU 看起来不忙,但系统仍然卡,再看
sar -q、sar -r和sar -W。 - 如果怀疑磁盘,直接看
sar -b和sar -d。 - 如果怀疑文件句柄、目录缓存或终端会话异常,再看
sar -v。
简单来说,sar 的价值不在于单个命令,而在于把 CPU、内存、I/O、队列和文件表放到同一条排查链路里看。这样你能更快判断系统到底卡在 CPU、内存还是磁盘上。