sar(System Activity Reporter)是Linux系统中强大的性能监控工具,源自sysstat工具包。它能够收集、报告和保存系统活动信息,特别适合分析历史性能数据和实时监控。
一、基本安装与使用
安装
# Ubuntu/Debian
sudo apt-get install sysstat
# RHEL/CentOS
sudo yum install sysstat
sudo systemctl enable sysstat
sudo systemctl start sysstat
# 验证安装
sar -V
数据收集配置
sar依赖cron定期收集数据,配置在/etc/cron.d/sysstat:
# 每10分钟收集一次(默认)
*/10 * * * * root /usr/lib64/sa/sa1 1 1
# 每天23:53生成每日报告
53 23 * * * root /usr/lib64/sa/sa2 -A
数据存储在/var/log/sa/saXX(二进制)和/var/log/sa/sarXX(文本)
二、关键监控维度与实战案例
案例1:CPU性能分析
# 实时监控CPU(2秒间隔,共5次)
sar -u 2 5
输出分析:
10:30:01 AM CPU %user %nice %system %iowait %steal %idle
10:30:03 AM all 45.20 0.00 8.70 12.30 0.00 33.80
- %user > 70%:应用可能CPU密集型
- %iowait > 30%:可能存在I/O瓶颈
- %system > 30%:系统调用过多或内核态繁忙
# 查看单个CPU核心
sar -P ALL 1 3
# 历史数据分析(查看昨天数据)
sar -u -f /var/log/sa/sa15 # sa15代表15号的数据
案例2:内存使用分析
# 监控内存使用
sar -r 1 5
输出关键指标:
10:30:01 AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit
10:30:02 AM 1023440 3146892 75.45 234568 1456728 4023456 65.2
- kbcached高:正常,Linux利用空闲内存作缓存
- %commit接近100%:可能内存不足
- 持续kbmemfree低:考虑增加内存或优化应用
# 查看内存交换情况
sar -S 1 5
# 输出中 %swpused 持续增长需警惕
案例3:I/O性能分析
# 监控磁盘I/O
sar -d 1 5
# 或指定设备
sar -d -p sda 1 3
关键指标解析:
10:30:01 AM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
10:30:02 AM sda 120.4 800.2 2400.5 26.6 3.2 26.7 8.3 100.2
- %util > 80%:磁盘繁忙
- await > svctm:可能存在I/O队列
- avgqu-sz > 1:I/O请求排队
案例4:网络性能分析
# 监控网络接口
sar -n DEV 1 5
重要指标:
10:30:01 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
10:30:02 AM eth0 1204.5 893.2 1456.7 892.1 0.0 0.0 12.3
- rxpck/s过高:检查是否网络攻击或应用异常
- rxdrop/txdrop > 0:可能存在网络瓶颈
- 带宽使用率:(rxkB/s+txkB/s)8/带宽100%
# 分析TCP连接状态
sar -n TCP,ETCP 1 5
# 关注主动/被动连接、重传率等
三、综合性能问题诊断案例
场景:Web服务器响应慢
# 1. 综合查看(昨天全天数据)
sar -A -f /var/log/sa/sa$(date -d yesterday +%d)
# 2. 定位时间点(假设10:00-11:00慢)
sar -u -s 10:00:00 -e 11:00:00
# 3. 同时查看CPU、内存、IO
sar -urS 1 10
# 4. 生成易读报告
sar -o /tmp/perf.data 1 60 # 收集1分钟数据
sadf -d /tmp/perf.data -- -u -r -d | awk '{print $1,$3,$4,$5,$6}'
诊断流程:
# 第一步:快速健康检查
sar -q 1 3 # 查看负载
# 输出:runq-sz > CPU核心数×2 表示进程排队
# 第二步:深入分析
pidstat 1 5 # 配合查看进程级指标
# 第三步:生成详细报告
sar -o /tmp/debug_sar 1 300 # 收集5分钟数据
# 第四步:图形化分析(需要额外工具)
# 使用ksar或导入Excel分析
四、常用命令组合与技巧
1. 时间段分析
# 分析今天10:00到12:00
sar -u -s 10:00:00 -e 12:00:00
# 分析特定日期
sar -u -f /var/log/sa/sa10 -s 14:00:00 -e 15:00:00
2. 关键指标监控脚本
#!/bin/bash
# monitor_sar.sh
INTERVAL=2
COUNT=30
echo "=== $(date) 系统性能快照 ==="
echo "1. CPU使用率:"
sar -u $INTERVAL $COUNT | tail -5
echo -e "\n2. 内存使用:"
sar -r $INTERVAL $COUNT | tail -5
echo -e "\n3. 磁盘I/O:"
sar -d $INTERVAL $COUNT | tail -5
echo -e "\n4. 系统负载:"
sar -q $INTERVAL $COUNT | tail -5
3. 保存与导出数据
# 二进制格式保存(可后续分析)
sar -o /tmp/monitor.dat 1 60
# 导出为CSV格式
sadf -d /tmp/monitor.dat -- -u > cpu_data.csv
# 生成精美报告
sar -A | grep -E "Average|^[0-9]" > /tmp/sar_report.txt
五、常见性能问题模式识别
| 现象 |
可能原因 |
检查命令 |
|---|
| 系统卡顿,%idle低 |
CPU瓶颈 |
sar -u,top |
| 磁盘灯常亮,响应慢 |
I/O瓶颈 |
sar -d,iostat -x |
| 内存不足,swap使用高 |
内存瓶颈 |
sar -rS,free -m |
| 网络延迟大 |
网络瓶颈 |
sar -n DEV,netstat -s |
| 进程排队多 |
负载过高 |
sar -q,uptime |
六、高级技巧
1. 与其他工具结合
# 结合mpstat查看CPU中断
sar -u 1 3 && mpstat -P ALL 1 3
# 结合vmstat
sar -r 1 3; echo "---"; vmstat 1 3
2. 自动化监控报警
# 检查CPU使用率并报警
CPU_USE=$(sar -u 1 1 | tail -1 | awk '{print 100-$NF}')
if (( $(echo "$CPU_USE > 90" | bc -l) )); then
echo "警告: CPU使用率 ${CPU_USE}%" | mail -s "系统警报" admin@example.com
fi
3. 性能基准建立
# 记录正常时段基准
sar -u -f /var/log/sa/sa$(date +%d) -s "09:00:00" -e "10:00:00" > /tmp/baseline_cpu.txt
sar -r -f /var/log/sa/sa$(date +%d) -s "09:00:00" -e "10:00:00" > /tmp/baseline_mem.txt
总结
sar的强大之处在于:
历史数据分析:能追溯几天甚至几周前的性能状况
综合视角:一个命令查看CPU、内存、IO、网络
低开销:数据收集对系统影响极小
灵活性:支持实时监控和历史数据查询
建议将sar纳入日常监控体系,配合grafana等可视化工具,构建完整的性能监控平台。