Linux性能分析神器:sar命令详解(附实战示例+常见问题排查)
一、sar命令是什么?
sar(System Activity Reporter,系统活动报告器)是sysstat
工具包中的核心命令,可采集、报告和保存系统资源使用情况,涵盖CPU、内存、磁盘、网络等核心指标。其最大优势在于:
-
历史数据追溯:自动按天归档性能数据,故障回溯神器
-
低开销监控:后台进程
sadc
定期采集,几乎不影响生产环境 -
全链路分析:覆盖系统资源全维度,告别工具切换
二、安装与配置(超详细避坑指南)
1. 安装sysstat工具包
# Ubuntu/Debian
sudo apt-get install sysstat -y
# CentOS/RHEL
sudo yum install sysstat -y
安装后必做配置:
修改/etc/default/sysstat
(Debian系)或/etc/sysconfig/sysstat
(RHEL系),启用数据收集:# 将ENABLED="false"改为 ENABLED="true"
重启服务生效:
systemctl restart sysstat
2. 数据存储路径解析
-
原始数据:
/var/log/sysstat/saXX
(XX为日期) -
日志轮转:
/etc/cron.d/sysstat
控制每天生成新文件
三、sar命令参数全解析(超全表格速查)
参数分类 | 参数 | 功能描述 | 使用示例 | |
---|---|---|---|---|
数据源 | -f [文件] | 读取历史数据文件 | sar -f /var/log/sysstat/sa15 | |
-s [hh:mm] | 设置报告起始时间 | sar -s 09:30:00 | ||
-e [hh:mm] | 设置报告结束时间 | sar -e 18:00:00 | ||
监控项目 | -u | CPU全局使用率(默认显示) | sar -u 1 5 | |
-P ALL|CPU | 监控指定CPU核心 | sar -P 1 1 3 (监控CPU1) | ||
-r | 内存与Swap统计 | sar -r 2 10 | ||
-S | Swap空间利用率 | sar -S 1 3 | ||
-B | 分页统计(page in/out) | sar -B | ||
-W | 页面交换统计 | sar -W | ||
-d | 磁盘I/O统计(需内核≥2.6) | sar -d 1 2 | ||
-b | I/O传输速率(bread/s,bwrtn/s) | sar -b | ||
-n DEV|EDEV | 网络设备统计(DEV基础/EDEV错误统计) | sar -n DEV 1 | ||
-n TCP|ETCP | TCP协议层统计 | sar -n TCP | ||
-q | 队列长度(运行队列、负载等) | sar -q | ||
-w | 进程上下文切换 | sar -w 1 5 | ||
-v | inode、文件句柄统计 | sar -v | ||
输出控制 | -o [文件] | 将监控数据保存为二进制文件 | sar -o /tmp/monitor.log 1 10 | |
-A | 全能模式(等效于-bBdHqrRSuvwWy -I SUM -m ALL -n ALL -u ALL -P ALL ) | sar -A 1 3 | ||
-p | 以友好格式显示设备名(如sda→/dev/sda) | sar -dp | ||
`-j {ID | LABEL}` | 显示设备持久化名称(适合LVM/多路径环境) | sar -dj LABEL | |
时间控制 | -i [秒] | 设置数据采集间隔(需结合-o 使用) | sar -i 60 -o /var/log/sysstat/sa15 | |
[间隔] [次数] | 通用格式:sar [选项] [间隔秒数] [采集次数] | sar -r 2 5 (每2秒采集1次,共采集5次) | ||
特殊模式 | -m | 监控电源管理指标(需内核≥3.4) | sar -m ALL | |
-I {中断号|SUM} | 监控特定中断(SUM显示总中断) | sar -I 14 1 5 (监控IRQ14) | ||
-H | 监控大页面使用情况 | sar -H |
高频组合参数示例
-
综合性能快照
sar -A 1 3 # 每1秒采集1次,共3次全维度数据
-
历史数据对比分析
# 对比今天和昨天的CPU使用率
sar -u -f /var/log/sysstat/sa$(date +%d -d yesterday) # 昨日
sar -u # 今日
-
设备级监控
sar -d -p -j ID 1 5 # 显示持久化设备名,避免重启后设备名变化
参数使用技巧
-
时间范围精确控制
# 分析上午10:00-11:30的CPU使用情况
sar -u -s 10:00:00 -e 11:30:00
-
动态过滤关键指标
# 只显示%iowait列
sar -u | awk '{print $1,$5}'
-
生成可视化数据
# 导出CSV格式数据用于绘图
sar -u -o /tmp/cpu_data.csv 1 10
注意事项
内核版本影响
部分参数(如
-d
)需要较新内核支持查看内核版本:
uname -r
数据保留周期
默认保留30天数据(通过
/etc/sysconfig/sysstat
中的HISTORY
参数控制)
权限要求
查看历史数据需要root权限
实时监控普通用户可用
该参数表可作为快速参考卡片,建议读者保存备用。在实际性能分析时,根据具体场景灵活组合参数,可大幅提升问题排查效率!
四、核心功能实战(附20+常用命令示例)
1. CPU性能分析
# 查看CPU全局使用率(默认显示当天) sar -u # 查看指定时间段的CPU数据 sar -u -s 10:00:00 -e 13:00:00 # 显示各CPU核心的独立统计(SMP系统必备) sar -P ALL 1 5
输出关键指标解读:
%user:用户态CPU时间
%system:内核态CPU时间
%iowait:等待I/O的CPU时间(>30%预警)
2. 内存与Swap分析
# 查看内存使用情况 sar -r 1 3 # Swap监控(频繁swapin/out需警惕) sar -W 1 5
核心指标:
kbmemfree:空闲物理内存
%memused:内存使用率
kbswpused:已用Swap空间
3. 磁盘I/O分析
# 显示磁盘I/O统计 sar -d 1 2 # 查看块设备吞吐量(排除干扰项) sar -dp | grep -v 'loop|docker'
关键指标:
tps:每秒传输次数
rkB/s:每秒读取数据量
wkB/s:每秒写入数据量
await:I/O平均等待时间(>50ms需关注)
4. 网络流量监控
# 查看网络设备吞吐 sar -n DEV 1 3 # TCP协议层统计(连接数、重传等) sar -n TCP,ETCP 1
核心指标:
rxkB/s:接收速率
txkB/s:发送速率
retrans/s:TCP重传率(>0需排查)
五、高级技巧(90%的人不知道的用法)
1. 生成精美报表
# 生成CSV格式报告(适合导入Excel) sar -u -f /var/log/sysstat/sa15 -- -o /tmp/cpu_report.csv # 绘制动态趋势图(搭配gnuplot) sadf -d /var/log/sysstat/sa15 -- -u | gnuplot -p -e "plot '
2. 自定义采集间隔
# 每2秒采集一次,共采集5次 sar -A 2 5
3. 跨服务器对比分析
# 通过ansible批量采集 ansible webservers -m shell -a "sar -u -s 14:00:00 -e 15:00:00"
六、高频问题排查案例
1. CPU软中断飙高
# 定位具体中断源 sar -I SUM 1 5
2. 内存泄漏定位
# 持续监控内存变化 watch -n 1 "sar -r | grep -i memused"
3. 磁盘瓶颈分析
# 结合iostat交叉验证 sar -d 1 3 && iostat -x 1 3
七、FAQ(解决你的疑惑)
Q1:安装后执行sar提示
command not found
?
A:检查sysstat
是否安装成功,并确认/usr/lib/sysstat
是否在PATH中。Q2:历史数据的时间显示异常?
A:时区配置问题!执行dpkg-reconfigure tzdata
(Debian系)或timedatectl set-timezone Asia/Shanghai
。Q3:如何保存当前监控数据?
A:使用-o
参数:sar -A -o /tmp/monitor.log 1 10
Q4:调整数据采集频率?
A:修改/etc/sysstat/sysstat
中的SADC_OPTIONS="-S XALL"
,增加-i
参数(如-i 60
表示每分钟采集)。
八、总结
sar
命令是Linux系统性能分析的终极武器,通过本文的学习,您已经掌握:
✅ 全维度资源监控方法
✅ 历史数据分析技巧
✅ 高频性能问题定位套路
立即行动:将文中的命令示例在测试环境执行一遍,遇到问题欢迎在评论区交流!