Linux 系统监控工具 sar 使用指南
一、工具概述
sar(System Activity Reporter) 是 Linux 下功能强大的系统活动报告工具,属于 sysstat 软件包的核心组件。它通过采集系统资源(CPU、内存、磁盘、网络、进程等)的使用数据,生成统计报告,常用于性能分析、故障诊断、容量规划等场景。其特点包括:
- 数据全面:覆盖系统级和设备级的多维度指标。
- 历史追踪:支持将数据保存到日志文件,供后续离线分析。
- 灵活性高:可自定义采样间隔和统计周期,适用于实时监控和长期趋势分析。
二、安装方式
1. 系统包管理器安装(推荐)
Ubuntu/Debian
sudo apt update && sudo apt install sysstat
CentOS/RHEL/Fedora
sudo yum install sysstat # CentOS 7及以下
sudo dnf install sysstat # CentOS 8+/Fedora
2. 源码编译安装(适用于自定义版本)
# 下载源码(以 sysstat-12.7.0 为例)
wget https://pagesperso-orange.fr/sebastien.godard/sysstat/sysstat-12.7.0.tar.gz
tar -zxvf sysstat-12.7.0.tar.gz
cd sysstat-12.7.0
./configure && make && sudo make install
启动与配置
- 服务启动:安装后默认开机启动,可通过以下命令管理:
sudo systemctl start sysstat # 启动服务 sudo systemctl enable sysstat # 设置开机自启
- 日志配置:数据默认保存到
/var/log/sysstat/
目录,配置文件为/etc/sysstat/sysstat.conf
,可修改采样频率(如USER_HISTORY=28
表示保留 28 天日志)。
三、核心功能
功能分类 | 典型场景 |
---|---|
CPU 性能分析 | 统计 CPU 利用率、用户态/内核态时间、上下文切换次数等 |
内存与swap分析 | 监控物理内存、Swap 使用量、页面交换速率 |
磁盘 I/O 监控 | 统计磁盘读写速率、队列长度、利用率等(按设备或分区) |
网络流量统计 | 分析网络接口的收发字节数、数据包速率、错误率 |
进程状态追踪 | 查看进程创建速率、运行队列长度、僵尸进程数量 |
历史数据查询 | 读取日志文件,分析过去某段时间的系统性能趋势 |
四、基础用法
1. 实时监控系统概况(默认显示 CPU 统计)
sar -u 1 3 # 每隔 1 秒采样,共采集 3 次
- 输出解读:
%user
:用户态 CPU 使用率%nice
:低优先级用户态任务 CPU 使用率%system
:内核态 CPU 使用率%iowait
:等待 I/O 的 CPU 时间百分比%steal
:被虚拟机偷用的 CPU 时间(云服务器场景常见)%idle
:空闲 CPU 时间百分比
2. 监控内存与 Swap
sar -r 2 5 # 每隔 2 秒采样,共 5 次
- 关键指标:
kbmemfree
:空闲物理内存(KB)kbmemused
:已用物理内存(KB)%memused
:物理内存使用率kbswpfree
:空闲 Swap 空间(KB)kbswpused
:已用 Swap 空间(KB)%swpused
:Swap 使用率
3. 查看磁盘 I/O 情况
sar -d 3 4 # 每隔 3 秒采样,共 4 次(需内核支持 `sysstat` 磁盘统计)
- 核心字段:
DEV
:磁盘设备名(如sda
、nvme0n1p1
)tps
:每秒 I/O 传输次数rd_sec/s
:每秒读取扇区数wr_sec/s
:每秒写入扇区数avgrq-sz
:平均 I/O 请求大小(扇区)await
:平均 I/O 等待时间(毫秒)%util
:设备利用率(长期接近 100% 表示磁盘瓶颈)
4. 统计网络接口流量
sar -n DEV 2 3 # 每隔 2 秒采样,显示网络接口数据
- 常用参数:
DEV
:显示所有网络接口的收发数据EDEV
:显示网络错误统计(如丢包、错误帧)- 输出示例:
rxpck/s
(每秒接收数据包)、txbyt/s
(每秒发送字节数)
五、进阶操作
1. 分析历史日志数据(默认日志路径:/var/log/sysstat/saXX
)
# 查看某天的 CPU 统计(如 2025年5月26日,日志文件 sa26)
sar -u -f /var/log/sysstat/sa26 10:00-12:00 # 查看 10:00-12:00 数据
2. 监控指定进程的资源占用
# 追踪 PID=1234 的进程(需结合 `-p` 参数)
sar -p 1234 1 5 # 每隔 1 秒采样,共 5 次
3. 生成综合性能报告
sar -A # 显示所有可用指标的汇总报告(等同于 `-u -r -d -n DEV -q` 等组合)
4. 自定义统计指标输出
sar -o data.bin 2 10 # 将采样数据保存到二进制文件 data.bin
sar -x data.bin # 从二进制文件读取并解析数据
六、实战案例:定位数据库服务器磁盘瓶颈
场景:某 PostgreSQL 服务器响应缓慢,怀疑磁盘 I/O 存在瓶颈。
步骤 1:实时监控磁盘设备
sar -d 2 10 # 持续 20 秒监控磁盘
- 发现
sda1
设备的%util
长期超过 90%,await
高达 50ms(正常应低于 20ms)。
步骤 2:分析具体 I/O 模式
sar -d -p sda1 2 5 # 聚焦 sda1 设备
- 输出显示
wr_sec/s
远高于rd_sec/s
,判断为写入密集型负载。
步骤 3:优化方案
- 检查数据库日志,发现频繁的事务日志写入(WAL 机制)。
- 将日志文件迁移至独立 SSD 磁盘,或调整
checkpoint
周期减少写入频率。 - 优化后再次执行
sar -d
,%util
降至 40%,系统响应恢复正常。
七、注意事项
-
权限要求:
- 部分统计功能(如磁盘详细信息)需
root
权限,普通用户仅能查看部分指标。
- 部分统计功能(如磁盘详细信息)需
-
日志存储:
- 日志文件默认按天存储(如
sa01
对应每月 1 日数据),可通过修改/etc/sysstat/sysstat.conf
中的SAVE_DELTA
调整保留天数。 - 大流量服务器需定期清理或归档日志,避免磁盘空间不足。
- 日志文件默认按天存储(如
-
指标解读陷阱:
- CPU 利用率:多核 CPU 需结合
sar -u ALL
查看每个核心的负载(ALL
表示汇总所有核心)。 - 磁盘
%util
:该指标非线性,单块磁盘%util
超过 60% 可能已出现性能下降(RAID 阵列可更高)。 - Swap 使用:偶尔的 Swap 活动正常,持续高 Swap 使用率通常表示物理内存不足。
- CPU 利用率:多核 CPU 需结合
-
性能影响:
- 采样间隔过短(如 < 1 秒)可能增加系统开销,生产环境建议设置为 5-10 秒。
- 长期监控建议配合
cron
定期生成报告(如每天凌晨执行sar -A -o
保存数据)。
-
内核兼容性:
- 旧内核(如 < 2.6)可能不支持部分磁盘或网络指标,需升级内核或安装补丁。
扩展工具链:
- 结合
iostat
(磁盘)、netstat
(网络)、vmstat
(系统资源)进行多维度验证。 - 使用
pstack
、perf
等工具深入分析进程级瓶颈。