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 |
人性化显示 |
监控不同系统资源
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使用率(默认)
2. 监控CPU使用率,每2秒一次,共5次
3. 监控每个CPU核心的使用率
4. 监控内存使用情况
5. 监控磁盘I/O活动
6. 使用可读的设备名监控磁盘
7. 监控网络接口统计
8. 监控系统负载和运行队列
9. 监控分页活动
10. 监控交换分区使用
11. 查看所有系统活动
12. 保存数据到文件
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