当前位置:首页>Linux>Linux sar 命令详解:语法、选项与性能

Linux sar 命令详解:语法、选项与性能

  • 2026-10-11 06:43:39
Linux sar 命令详解:语法、选项与性能
基本信息

简介

sar(System Activity Reporter,系统活动报告器)用于打印 CPU、内存、磁盘、网络和负载平均值,数据来源可以是实时计数器,也可以是 sysstat 在 /var/log/sysstat 下收集的历史文件。需要安装 sysstat 包并启用数据收集才能查看历史报告。

软件包

sysstat (apt/deb) / sysstat (dnf/rpm)

手册页

sar(1)

权限

普通用户(部分报告可能需要 root 权限)

发行版

所有包含 sysstat 的发行版(Ubuntu、Debian、RHEL、Fedora、SUSE 等)。实时进程查看:top;块设备快照:iostat。

语法概要

用法:sar [ 选项 ] [ <间隔> [ <次数> ] ]

不带选项时,sar 打印自启动以来的平均 CPU 利用率。指定间隔和可选次数时,它采样实时计数器。使用 -f 或负日期偏移(-1)时,它读取 sadc 写入的二进制归档文件——通常在启用 sysstat 服务后位于 /var/log/sysstat 下。

命令示例

3.1 实时 CPU 采样(每 2 秒)

当你需要判断 CPU 峰值是持续的还是短暂时,使用较短的间隔——在繁忙主机上保持 1-5 秒的间隔。

运行命令:

sar -u 2 3

示例输出:

字段说明:

时间戳

采样时间,格式为 HH:MM:SS AM/PM

CPU

处理器标识,all 表示所有 CPU 的平均值

%user

用户空间进程占用 CPU 的百分比

%nice

用户进程优先级

%system

内核空间进程占用 CPU 的百分比

%iowait

CPU 等待 I/O 操作完成的时间百分比

%steal

虚拟机管理器占用 CPU 的时间百分比(虚拟化环境中)

%idle

CPU 空闲时间的百分比

高 %system 且低 %idle 通常指向内核或系统调用密集型工作;可配合 sar -w 或 top 查看哪些进程导致。

3.2 内存和磁盘 I/O 联合排查

当主机感觉变慢时,在调整应用前先检查瓶颈是内存压力还是磁盘等待。

内存利用率:

sar -r 1 1

示例输出:

字段说明:

时间戳

采样时间

kbmemfree

空闲物理内存大小,单位为 KB

kbavail

可用内存大小(包含缓存和缓冲区),单位为 KB

kbmemused

已使用的物理内存大小,单位为 KB

%memused

已使用物理内存的百分比

kbbuffers

缓冲区缓存大小,单位为 KB

kbcached

页面缓存大小,单位为 KB

kbcommit

当前工作负载需要的内存量(含交换空间),单位为 KB

%commit

已提交内存占物理内存和交换空间总和的百分比

kbactive

活跃内存大小(最近使用过的内存),单位为 KB

kbinact

非活跃内存大小(最近未使用的内存),单位为 KB

kbdirty

等待写回磁盘的脏页大小,单位为 KB

I/O 速率:

sar -b 1 1

示例输出:

字段说明:

时间戳

采样时间

tps

每秒传输次数(I/O 请求数)

rtps

每秒读请求数

wtps

每秒写请求数

dtps

每秒丢弃请求数

bread/s

每秒读取的块数

bwrtn/s

每秒写入的块数

bdscd/s

每秒丢弃的块数

%commit 超过 100% 意味着可能存在交换或 OOM 风险;sar -u 中 bread/s 或 bwrtn/s 较高且 %iowait 升高表明存在存储瓶颈——详见 iostat 获取每设备详情。

3.3 块设备和网络接口

磁盘和网络报告可帮助你在故障期间区分存储延迟和网卡饱和。

块设备统计:

sar -d 1 1 | tail -5

每接口吞吐量:

sar -n DEV 1 1

示例输出:

字段说明:

时间戳

采样时间

IFACE

网络接口名称

rxpck/s

每秒接收的数据包数

txpck/s

每秒发送的数据包数

rxkB/s

每秒接收的千字节数

txkB/s

每秒发送的千字节数

rxcmp/s

每秒接收的压缩数据包数

txcmp/s

每秒发送的压缩数据包数

rxmcst/s

每秒接收的多播数据包数

%ifutil

接口利用率百分比

物理网卡上 %ifutil 上升但应用吞吐量持平可能意味着链路或驱动限制——使用 sar -n EDEV 查看错误计数器。

3.4 读取历史数据 /var/log/sysstat

不带间隔的 sar 读取自启动以来的平均值。要查看全天趋势,读取 sadc 在启用 sysstat 收集时写入的二进制文件 sa1 … sa31(或 saYYYYMMDD)。

列出可用归档:

ls -l /var/log/sysstat/sa*

读取今天文件:

sar -f /var/log/sysstat/sa10 | head -10

示例输出:

字段说明:

时间戳

采样时间

CPU

处理器标识,all 表示所有 CPU 的平均值

%user

用户空间进程占用 CPU 的百分比

%nice

用户进程优先级

%system

内核空间进程占用 CPU 的百分比

%iowait

CPU 等待 I/O 操作完成的时间百分比

%steal

虚拟机管理器占用 CPU 的时间百分比

%idle

CPU 空闲时间的百分比

如果 /var/log/sysstat 为空,启用收集:在 /etc/default/sysstat 中设置 ENABLED="true",然后运行 sudo systemctl restart sysstat。

3.5 使用 -P ALL 进行每 CPU 细分

多核主机上单个 CPU 过热在全局平均中只表现为小幅峰值——每 CPU 视图可让不均衡负载一目了然。

sar -P ALL 1 1

示例输出:

字段说明:

Average

平均值标识

CPU

处理器标识,all 为全局平均,0、1 等为具体 CPU 编号

%user

用户空间进程占用 CPU 的百分比

%nice

带有 nice 优先级的用户进程占用 CPU 的百分比

%system

内核空间进程占用 CPU 的百分比

%iowait

CPU 等待 I/O 操作完成的时间百分比

%steal

虚拟机管理器占用 CPU 的时间百分比

%idle

CPU 空闲时间的百分比

如需每 CPU 的 irq/softirq 列,可与 sar -u ALL 对比。

3.6 运行队列和负载平均值

负载平均值回答"有多少任务在等待 CPU 时间?"——当 %idle 看起来正常但延迟很高时很有用。

sar -q 1 1

示例输出:

字段说明:

时间戳

采样时间

runq-sz

运行队列长度(等待 CPU 的进程数)

plist-sz

进程列表中的进程总数

ldavg-1

过去 1 分钟的平均负载

ldavg-5

过去 5 分钟的平均负载

ldavg-15

过去 15 分钟的平均负载

blocked

当前被 I/O 阻塞的进程数

runq-sz 长期高于 CPU 数量且 ldavg-1 高通常意味着 CPU 饱和;blocked 高指向 I/O 等待——交叉检查 sar -b 和 sar -d。

3.7 使用 -h 显示人类可读百分比

脚本和仪表板有时需要在 CPU 列上显示百分号而无需后处理。

sar -h -u 1 1

示例输出:

字段说明:

时间戳

采样时间

CPU

处理器标识,all 表示所有 CPU 的平均值

%user

用户空间进程占用 CPU 的百分比

%nice

用户进程优先级

%system

内核空间进程占用 CPU 的百分比

%iowait

CPU 等待 I/O 操作完成的时间百分比

%steal

虚拟机管理器占用 CPU 的时间百分比

%idle

CPU 空闲时间的百分比

-h 在 sysstat 12.7.5 中等同于 --pretty --human。

3.8 无归档文件 — 启用 sysstat 收集

新安装的系统通常已安装 sar 但无历史文件,直到启用 sysstat 收集。

检查服务是否激活:

systemctl is-active sysstat

cat /etc/default/sysstat | grep ENABLED

收集开启时的示例输出:

active          ENABLED="true"

如果启用后 ls /var/log/sysstat 仍为空,等待 /etc/cron.d/sysstat 中的定时任务(默认每 10 分钟)或运行一次 sudo sa1 1 1 来生成文件,然后重试 sar -f /var/log/sysstat/sa$(date +%d)。

使用场景

使用 sar 

使用其他工具

- 需要从 /var/log/sysstat 查看 CPU、内存、磁盘或网络数小时或数天的趋势                  - 想要可重复的间隔采样(sar -u 2 10)用于前后对比                  - 已在使用 sysstat 套件,想要一个工具覆盖多种资源类别                  - 需要从归档数据中查看每 CPU 或每接口的细分

- 需要实时、可排序的进程列表 → top 或 ps                  - 想要当前每进程磁盘 I/O → iotop                  - 需要详细的每磁盘吞吐量和 util% 快照 → iostat                  - 想要即时内存和交换计数器而不需要归档 → vmstat                  - /var/log/sysstat 为空且无法启用 sysstat 收集 → 仅使用实时 sar INTERVAL

sar vs iostat

两者都来自 sysstat 并读取内核计数器,但侧重点不同。

sar

iostat

主要关注点

多种资源类别;历史文件

每设备的磁盘 I/O 和 CPU

历史数据

支持(-f, /var/log/sysstat)

有限(主要是实时)

每进程详情

无

无

最适合

日常趋势、混合 CPU/内存/磁盘/网络

存储瓶颈分析

详见 iostat 命令获取每设备的 %util 和 await 列。

常见问题

Q1: sar 命令在 Linux 中做什么?

sar(System Activity Reporter,系统活动报告器)是 sysstat 软件包的一部分。它读取内核活动计数器并打印 CPU、内存、磁盘、网络、负载等报告。

实践中两种模式很重要:

1.1. 实时模式 — sar -u 2 5 每 2 秒采样,共 5 次。

2.2. 历史模式 — sar -f /var/log/sysstat/sa01 回放 sysstat 收集时由 sadc 收集的数据。

更进一步:

"sar 从 sysstat 报告系统活动——可通过间隔/次数实时采样,或从 /var/log/sysstat 下的二进制归档读取。我用它来查看 CPU、内存、磁盘和网络随时间的趋势。"

Q2: 何时使用 sar 而不是 top?

top 显示当前哪些进程在使用 CPU 和内存。sar 汇总随时间的资源类别并可读取归档样本——更适合回答"上周二 14:00 磁盘 I/O 是否很高?"

交互式排查用 top;容量规划、事后时间线和跨重启证明模式(有归档时)用 sar。

更进一步:

"top 用于实时每进程视图;sar 用于间隔采样和历史 sysstat 文件,当我需要数小时或数天的趋势,而非仅当前进程列表时。"

Q3: sar 在 Ubuntu 上将历史数据存储在哪里?

在 Debian 和 Ubuntu 上,sadc 通常写入 /var/log/sysstat。文件名为 saDD 或 saYYYYMMDD。sysstat 服务必须启用(/etc/default/sysstat 中 ENABLED="true"),且 /etc/cron.d/sysstat 中的定时任务必须运行。

使用 sar -f /var/log/sysstat/sa01 读取,或 sar -1 查看昨天。

更进一步:

"在 /var/log/sysstat 下,以 saDD 或 saYYYYMMDD 二进制文件形式存在,由 sadc 在 sysstat 启用时填充——我用 sar -f 或 sar -1 读取昨天的数据。"

Q4: 如何用 sar 排查高 I/O 等待?

从 sar -u 开始——高 %iowait 意味着 CPU 空闲等待存储。然后运行 sar -b(聚合传输速率)和 sar -d(每块设备)。配合 iostat 获取每磁盘的 %util 和 await。

更进一步:

"我先在 sar -u 中检查 %iowait,然后用 sar -b 和 sar -d 查看传输和每设备活动,需要每磁盘 util% 和服务时间时再用 iostat。"

Q5: 如何在 Ubuntu 上安装 sar?

安装 sysstat 软件包——sar、iostat、mpstat 和 sadc 一起打包:

sudo apt install sysstat

在 /etc/default/sysstat 中启用收集,重启服务,确认 /var/log/sysstat 下出现文件。

更进一步:

"apt install sysstat——sar 不是单独包。我启用 ENABLED=true,重启 sysstat,并验证 /var/log/sysstat 下的 sa* 文件。"

常见使用问题解决

症状

可能原因

修复方法

Cannot open /var/log/sysstat/saXX: No such file

收集未启用或文件尚未创建

在 /etc/default/sysstat 中设置 ENABLED="true";sudo systemctl restart sysstat;等待定时任务或运行 sudo sa1 1 1

sar: command not found

未安装 sysstat

sudo apt install sysstat

-m TEMP / -m FAN 输出为空或只有一行

虚拟机或硬件未暴露传感器

许多云虚拟机正常现象;省略这些报告或使用宿主机监控指标

标志报 Invalid option

sysstat 版本较旧

对照主机上的 sar --help 匹配标志(本页对应 sysstat 12.7.5)

实时 sar 1 造成明显负载

小型实例上间隔过于激进

使用 2-10 秒间隔或读取归档文件

sar — 快速参考

8.1 CPU 和处理器

自启动以来的 CPU 利用率(默认报告)

sar

CPU 利用率报告

sar -u

CPU 完整报告(含 irq、soft、guest 等)

sar -u ALL

CPU 0 的每处理器统计

sar -P 0

所有 CPU 的每处理器统计及全局平均

sar -P ALL

一次性运行所有活动报告(输出量很大)

sar -A

8.2 内存、交换和分页

内存利用率

sar -r

内存完整报告

sar -r ALL

交换空间利用率

sar -S

分页统计

sar -B

内存交换(每秒换入/换出页数)

sar -W

大页利用率

sar -H

8.3 磁盘和 I/O

I/O 和传输速率统计

sar -b

块设备活动

sar -d

在 -d 输出中省略空闲块设备

sar -z -d

文件系统空间统计

sar -F

单个挂载点的文件系统统计

sar -F /

8.4 网络

网络接口吞吐量(数据包和 kB/s)

sar -n DEV

网络接口错误计数器

sar -n EDEV

NFS 客户端统计

sar -n NFS

NFS 服务端统计

sar -n NFSD

IPv4 套接字统计

sar -n SOCK

IPv4 IP 流量

sar -n IP

IPv4 IP 错误

sar -n EIP

IPv4 ICMP 流量

sar -n ICMP

IPv4 ICMP 错误

sar -n EICMP

IPv4 TCP 流量

sar -n TCP

IPv4 TCP 错误

sar -n ETCP

IPv4 UDP 流量

sar -n UDP

IPv6 套接字统计

sar -n SOCK6

IPv6 IP 流量

sar -n IP6

IPv6 IP 错误

sar -n EIP6

IPv6 ICMP 流量

sar -n ICMP6

IPv6 ICMP 错误

sar -n EICMP6

IPv6 UDP 流量

sar -n UDP6

光纤通道 HBA 统计

sar -n FC

所有网络关键字报告

sar -n ALL

8.5 负载、任务和内核表

运行队列长度和平均负载

sar -q

仅平均负载

sar -q LOAD

压力停滞 CPU 统计

sar -q CPU

压力停滞 I/O 统计

sar -q IO

压力停滞内存统计

sar -q MEM

所有负载和 PSI 关键字

sar -q ALL

任务创建和上下文切换

sar -w

inode、文件和内核表使用

sar -v

每秒中断总数

sar -I SUM

TTY 设备活动

sar -y

8.6 电源管理 (-m)

电池容量

sar -m BAT

CPU 瞬时时钟频率

sar -m CPU

风扇转速

sar -m FAN

CPU 平均时钟频率

sar -m FREQ

电压输入

sar -m IN

设备温度传感器

sar -m TEMP

USB 设备接入

sar -m USB

所有电源管理关键字

sar -m ALL

8.7 实时间隔和历史文件

每 N 秒采样一次,直到按 Ctrl+C

sar -u 2

每 N 秒采样 M 次后退出

sar -u 2 5

读取已保存的数据文件(默认目录 /var/log/sysstat)

sar -f /var/log/sysstat/sa01

昨天的数据文件(相对日期偏移)

sar -1

两天前的数据

sar -2

将实时采样保存为二进制文件

sar -o /tmp/sar.out -u 2 3

读取归档文件时显示时间戳

sar -t -f /var/log/sysstat/sa01

显示归档文件中嵌入的注释

sar -C -f /var/log/sysstat/sa01

使用 -o 写入时采用 saYYYYMMDD 命名

sar -D -o /var/log/sysstat/sa20260701 -u 2 3

读取归档时按开始时间过滤(HH:MM:SS)

sar -s 09:00:00 -e 12:00:00 -f /var/log/sysstat/sa01

8.8 输出过滤和格式

限制 -d 输出中的块设备

sar --dev=sda -d

限制 -F 输出中的文件系统

sar --fs=/ -F

限制 -n DEV 中的网络接口

sar --iface=lo -n DEV

限制 -I 输出中的中断号

sar --int=1 -I SUM

人类可读的百分比(-h 别名)

sar -h -u 1 1

美观打印输出

sar --pretty -u 1 1

人类可读的单位

sar --human -u 1 1

百分比小数位(0、1 或 2)

sar --dec=2 -u 1 1

显示最小/最大列(扩展报告)

sar -x -u 1 1

打印收集数据时使用的 sadc 命令行

sar --sadc -f /var/log/sysstat/sa01

8.9 帮助和版本

简要用法(主要报告标志)

sar --help

软件包版本

sar -V

相关工具

命令

说明

sar

系统活动报告器(本文档)

最新文章

随机文章