sar 命令 #
sar
(System Activity Reporter)是一个功能强大的系统性能监控工具,用于收集、报告和保存系统活动信息。它可以监控CPU、内存、磁盘I/O、网络接口等多种系统资源的使用情况,并提供历史数据分析功能。
语法 #
sar [选项] [间隔 [计数]] [-f 文件]
常用选项 #
选项 | 描述 |
---|---|
-A |
报告所有统计信息(相当于-bBdFHSvwWy -I SUM -I XALL -n ALL -r ALL -u ALL ) |
-b |
报告I/O和传输速率统计信息 |
-B |
报告分页统计信息 |
-c |
报告进程创建统计信息 |
-d |
报告块设备活动统计信息 |
-F |
报告挂载文件系统统计信息 |
-H |
报告巨页利用率统计信息 |
-I {中断[,...] | SUM | ALL} |
报告中断统计信息 |
-m |
报告电源管理统计信息 |
-n {DEV | EDEV | NFS | NFSD | SOCK | IP | EIP | ICMP | EICMP | TCP | ETCP | UDP | SOCK6 | IP6 | EIP6 | ICMP6 | EICMP6 | UDP6 | ALL} |
报告网络统计信息 |
-P {cpu[,...] | ALL} |
报告每个CPU的统计信息 |
-q |
报告队列长度和负载平均值 |
-r [ ALL ] |
报告内存利用率统计信息 |
-R |
报告内存统计信息 |
-S |
报告交换空间利用率统计信息 |
-u [ ALL ] |
报告CPU利用率统计信息 |
-v |
报告inode、文件和其他内核表的统计信息 |
-w |
报告系统交换统计信息 |
-W |
报告系统交换统计信息 |
-y |
报告TTY设备活动统计信息 |
-f 文件 |
从指定文件中提取报告,而不是从/var/log/sa/sadd文件中提取 |
-s 时间 |
设置数据收集的开始时间(格式:HH:MM:SS) |
-e 时间 |
设置数据收集的结束时间(格式:HH:MM:SS) |
-i 秒数 |
选择以指定秒数为间隔的记录 |
-o 文件 |
将数据保存到指定文件,而不是标准输出 |
-j {ID | LABEL | PATH | UUID | ... } |
指定设备的显示方式 |
-p |
美观打印模式(更易读) |
-t |
在每个报告中打印时间信息 |
-h |
显示帮助信息 |
-V |
显示版本信息 |
输出字段说明 #
CPU统计信息(-u选项) #
%user
:用户空间中运行的进程使用的CPU百分比%nice
:运行在nice优先级上的用户进程使用的CPU百分比%system
:内核空间中运行的进程使用的CPU百分比%iowait
:系统处于I/O等待状态的CPU百分比%steal
:虚拟化环境中被其他操作系统窃取的CPU百分比%idle
:CPU空闲时间百分比
内存统计信息(-r选项) #
kbmemfree
:空闲内存量(KB)kbmemused
:已使用内存量(KB)%memused
:已使用内存百分比kbbuffers
:用于缓冲区的内存量(KB)kbcached
:用于缓存的内存量(KB)kbcommit
:当前工作负载所需的内存量(KB)%commit
:当前工作负载所需内存占总可用内存的百分比
交换空间统计信息(-S选项) #
kbswpfree
:空闲交换空间(KB)kbswpused
:已使用交换空间(KB)%swpused
:已使用交换空间百分比kbswpcad
:缓存的交换内存(KB)%swpcad
:缓存的交换内存占已使用交换空间的百分比
I/O和传输速率统计信息(-b选项) #
tps
:每秒传输次数rtps
:每秒读取请求次数wtps
:每秒写入请求次数bread/s
:每秒读取的块数bwrtn/s
:每秒写入的块数
网络统计信息(-n DEV选项) #
IFACE
:网络接口名称rxpck/s
:每秒接收的数据包数txpck/s
:每秒发送的数据包数rxkB/s
:每秒接收的KB数txkB/s
:每秒发送的KB数rxcmp/s
:每秒接收的压缩数据包数txcmp/s
:每秒发送的压缩数据包数rxmcst/s
:每秒接收的多播数据包数
常见用法 #
1. 实时监控系统活动 #
sar 2 5
这将每2秒收集一次数据,共收集5次。
2. 查看CPU使用情况 #
sar -u 1 3
这将每1秒显示一次CPU使用情况,共显示3次。
3. 查看每个CPU的使用情况 #
sar -P ALL 1 3
4. 查看内存使用情况 #
sar -r 1 3
5. 查看交换空间使用情况 #
sar -S 1 3
6. 查看I/O活动 #
sar -b 1 3
7. 查看块设备活动 #
sar -d 1 3
8. 查看网络接口统计信息 #
sar -n DEV 1 3
9. 查看网络TCP统计信息 #
sar -n TCP 1 3
10. 查看系统负载 #
sar -q 1 3
11. 查看历史数据 #
sar -f /var/log/sa/sa20
这将显示当月20日的系统活动数据。
12. 查看特定时间段的数据 #
sar -s 10:00:00 -e 11:00:00 -f /var/log/sa/sa20
这将显示当月20日上午10点到11点之间的数据。
实用示例 #
1. 全面监控系统性能 #
sar -A 1 10
这将每秒显示一次所有系统活动数据,共显示10次。
2. 监控CPU瓶颈 #
sar -u -P ALL 1 | grep -v CPU | awk '$8 < 20 {print}'
这将显示空闲率低于20%的CPU。
3. 监控内存使用趋势 #
sar -r 1 | grep -v kbmem
4. 监控磁盘I/O瓶颈 #
sar -d 1 | grep -v avg-cpu
5. 监控网络流量 #
sar -n DEV 1 | grep -v IFACE | grep -v lo
这将显示除lo接口外的所有网络接口的流量。
6. 创建性能报告 #
sar -A -f /var/log/sa/sa20 > performance_report_day20.txt
7. 监控分页活动 #
sar -B 1 5
8. 监控进程创建活动 #
sar -c 1 5
9. 监控特定磁盘 #
sar -d -p 1 5 | grep sda
10. 结合其他命令分析性能 #
sar -u 1 5 | awk '$8 < 10 {print "CPU使用率高: " 100-$8 "%"}'
配置和数据文件 #
sar
命令依赖于sysstat
包,该包包含以下组件:
sadc
:系统活动数据收集器,负责收集数据sa1
:定期收集系统活动数据并保存到文件sa2
:生成每日报告/etc/cron.d/sysstat
:定义数据收集的cron作业/var/log/sa/
:存储系统活动数据的目录/etc/sysconfig/sysstat
或/etc/default/sysstat
:配置文件
启用数据收集 #
在大多数Linux发行版中,安装sysstat
包后会自动配置定期数据收集。如果没有,可以编辑/etc/cron.d/sysstat
文件添加定期收集任务。
性能分析指南 #
识别CPU瓶颈 #
- 高
%user
:用户进程消耗大量CPU - 高
%system
:内核或驱动程序消耗大量CPU - 高
%iowait
:系统等待I/O操作完成 - 高
%steal
:虚拟化环境中的资源争用
识别内存瓶颈 #
- 高
%memused
且低kbcached
:内存压力大 kbcommit
接近或超过总内存:可能需要增加内存- 高
%swpused
且高I/O等待:系统正在大量使用交换空间,性能下降
识别I/O瓶颈 #
- 高
tps
和低bread/s
、bwrtn/s
:大量小I/O操作 - 高
bread/s
、bwrtn/s
和高%iowait
:I/O子系统可能是瓶颈
识别网络瓶颈 #
- 高
rxpck/s
、txpck/s
和低rxkB/s
、txkB/s
:大量小数据包 rxkB/s
或txkB/s
接近网络接口容量:网络带宽可能是瓶颈
与其他性能监控工具的比较 #
工具 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
sar | 历史数据、全面的系统视图、低开销 | 配置复杂、不直观 | 长期性能趋势分析、系统性能基准测试 |
top/htop | 实时、交互式、进程级别详情 | 无历史数据、资源消耗较高 | 实时系统监控、进程级别问题排查 |
vmstat | 简单、轻量级 | 功能有限、无历史数据 | 快速系统概览 |
iostat | 详细的I/O统计信息 | 仅限I/O数据 | I/O性能分析 |
netstat/ss | 详细的网络连接信息 | 仅限网络数据 | 网络连接分析 |
提示 #
- 使用
-A
选项可以获取全面的系统性能视图,但输出可能很大 - 使用
-o
选项将输出保存到文件,便于后续分析 - 结合
grep
、awk
等工具可以过滤和处理sar
的输出 - 定期分析
sar
数据可以帮助识别性能趋势和异常 - 在性能调优前,先建立基准性能数据
- 使用
-f
选项可以分析过去的性能数据,有助于排查间歇性问题 - 在虚拟化环境中,关注
%steal
指标以识别资源争用 - 使用
-p
选项可以使输出更易读 - 对于长期监控,考虑将
sar
数据导出到监控系统或数据库 - 在分析性能问题时,同时查看多个子系统(CPU、内存、I/O、网络)的数据