linux sar命令

sar命令 是系统活动报告器(System Activity Reporter),用于收集、报告和保存系统活动信息。它是sysstat工具包中最强大的命令,可以监控CPU、内存、磁盘、网络、进程等几乎所有的系统指标。

命令格式

# 实时监控
sar [选项] [时间间隔] [次数]

# 查看历史数据
sar [选项] -f /var/log/sa/sa[日期]

# 保存数据到文件
sar [选项] -o 文件名

常用选项

选项 说明
-u CPU使用率
-r 内存使用情况
-b I/O和传输速率统计
-d 块设备活动
-n {DEV|EDEV|NFS|NFSD|SOCK|ALL} 网络统计
-q 队列长度和负载平均值
-W 交换分区统计
-p 可读的设备名(与-d一起使用)
-P {ALL|CPU编号} 每个CPU的统计
-f 文件名 从指定文件读取数据
-o 文件名 保存数据到二进制文件
-s 开始时间 设置开始时间(HH:MM:SS)
-e 结束时间 设置结束时间(HH:MM:SS)
-A 所有报告的总和
-h 人性化显示

监控不同系统资源

CPU监控
  • sar -u - CPU使用率
  • sar -P ALL - 每个CPU核心
  • sar -q - 系统负载
内存监控
  • sar -r - 内存使用
  • sar -B - 分页统计
  • sar -W - 交换分区
磁盘监控
  • sar -d - 磁盘活动
  • sar -b - I/O速率
  • sar -dp - 可读的磁盘名
网络监控
  • sar -n DEV - 网络接口
  • sar -n EDEV - 网络错误
  • sar -n SOCK - 套接字

使用实例

1. 实时监控CPU使用率(默认)
sar
2. 监控CPU使用率,每2秒一次,共5次
sar 2 5
3. 监控每个CPU核心的使用率
sar -P ALL 1 3
4. 监控内存使用情况
sar -r 1 3
5. 监控磁盘I/O活动
sar -d 1 3
6. 使用可读的设备名监控磁盘
sar -dp 1 3
7. 监控网络接口统计
sar -n DEV 1 3
8. 监控系统负载和运行队列
sar -q 1 3
9. 监控分页活动
sar -B 1 3
10. 监控交换分区使用
sar -W 1 3
11. 查看所有系统活动
sar -A
12. 保存数据到文件
sar -o /tmp/sar_data 1 5
13. 从文件读取历史数据
sar -f /var/log/sa/sa15  # 查看15号的数据
14. 查看指定时间段的数据
sar -s 09:00:00 -e 12:00:00 -f /var/log/sa/sa15

输出字段说明

CPU统计(sar -u)

字段 说明
%user 用户态CPU使用率
%nice 低优先级用户态CPU使用率
%system 内核态CPU使用率
%iowait CPU等待I/O的时间百分比
%steal 虚拟CPU被hypervisor占用的时间
%idle CPU空闲时间百分比

内存统计(sar -r)

字段 说明
kbmemfree 空闲内存(KB)
kbmemused 已使用内存(KB)
%memused 内存使用率
kbbuffers 缓冲区内存(KB)
kbcached 缓存内存(KB)
kbcommit 需要的内存总量(KB)
%commit 需要的内存百分比

磁盘统计(sar -d)

字段 说明
tps 每秒传输次数
rd_sec/s 每秒读取的扇区数
wr_sec/s 每秒写入的扇区数
avgrq-sz 平均请求大小(扇区)
avgqu-sz 平均队列长度
await 平均I/O等待时间(毫秒)
svctm 平均服务时间(毫秒)
%util 设备使用率

实际输出示例

示例1:CPU使用率监控
# sar -u 1 3
Linux 5.4.0-42-generic (server)   08/15/2023   _x86_64_   (4 CPU)

10:30:00 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
10:30:01 AM     all      5.25      0.00      1.75      0.25      0.00     92.75
10:30:02 AM     all      6.00      0.00      2.00      0.50      0.00     91.50
10:30:03 AM     all      4.75      0.00      1.50      0.25      0.00     93.50
Average:        all      5.33      0.00      1.75      0.33      0.00     92.59
示例2:内存使用情况
# sar -r 1 2
Linux 5.4.0-42-generic (server)   08/15/2023   _x86_64_   (4 CPU)

10:35:00 AM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit
10:35:01 AM   1256896   2987104     70.38     54324   1567892   4123456     48.15
10:35:02 AM   1255432   2988568     70.42     54348   1568032   4124892     48.18
示例3:网络接口统计
# sar -n DEV 1 2
Linux 5.4.0-42-generic (server)   08/15/2023   _x86_64_   (4 CPU)

10:40:00 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
10:40:01 AM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
10:40:01 AM     eth0    125.50     89.25     15.68      8.92      0.00      0.00      0.25
10:40:02 AM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
10:40:02 AM     eth0    130.25     92.50     16.28      9.25      0.00      0.00      0.30

配置文件

sar的数据收集由sadc守护进程完成,配置文件在/etc/sysconfig/sysstat/etc/default/sysstat

# 查看配置文件
cat /etc/sysconfig/sysstat

# 典型配置
HISTORY=28        # 保留28天的历史数据
COMPRESSAFTER=10  # 10天后压缩数据
SADC_OPTIONS="-S DISK"  # 收集磁盘统计
SA_DIR="/var/log/sa"    # 数据存储目录
注意:
  • sar默认显示系统启动以来的平均统计,使用间隔时间后显示实时数据
  • 历史数据存储在/var/log/sa/目录,sa[日期]是二进制文件,sar[日期]是文本文件
  • 使用-f选项可以查看任意日期的历史数据
  • -A选项会生成大量输出,建议重定向到文件
  • 确保sysstat服务已启动:systemctl enable sysstat

sar与其他命令对比

命令 主要用途 优势 劣势
sar 全面的系统活动报告 功能最全,有历史数据,可追溯分析 输出复杂,学习曲线陡
mpstat CPU性能监控 详细的CPU核心统计 只监控CPU
iostat 磁盘I/O监控 详细的磁盘性能指标 只监控磁盘
vmstat 虚拟内存统计 简单快速的内存和进程概览 信息不够详细
top/htop 实时进程监控 交互式,进程级别详细信息 无历史数据

安装和配置

# Ubuntu/Debian
sudo apt-get install sysstat

# CentOS/RHEL/Fedora
sudo yum install sysstat

# 启动服务
sudo systemctl start sysstat
sudo systemctl enable sysstat

# 配置数据收集频率(编辑cron)
sudo cat /etc/cron.d/sysstat
# 每10分钟收集一次系统活动数据
*/10 * * * * root /usr/lib64/sa/sa1 1 1
# 每天23:53生成每日报告
53 23 * * * root /usr/lib64/sa/sa2 -A

# 验证安装
sar -V
或
sar --version

常用组合命令

性能排查组合
# 查看过去24小时的CPU使用情况
sar -u -f /var/log/sa/sa$(date +%d -d yesterday)

# 查看今天9点到12点的内存使用
sar -r -s 09:00:00 -e 12:00:00

# 监控所有关键指标
sar -A 5 3 > /tmp/system_report.txt

# 查看磁盘繁忙情况
sar -d | grep -v "Average:" | sort -k10 -nr

# 查看网络流量最大的接口
sar -n DEV 1 1 | grep -v "IFACE" | sort -k3 -nr