sar命令

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/sbwrtn/s:大量小I/O操作
  • bread/sbwrtn/s和高%iowait:I/O子系统可能是瓶颈

识别网络瓶颈 #

  • rxpck/stxpck/s和低rxkB/stxkB/s:大量小数据包
  • rxkB/stxkB/s接近网络接口容量:网络带宽可能是瓶颈

与其他性能监控工具的比较 #

工具 优点 缺点 适用场景
sar 历史数据、全面的系统视图、低开销 配置复杂、不直观 长期性能趋势分析、系统性能基准测试
top/htop 实时、交互式、进程级别详情 无历史数据、资源消耗较高 实时系统监控、进程级别问题排查
vmstat 简单、轻量级 功能有限、无历史数据 快速系统概览
iostat 详细的I/O统计信息 仅限I/O数据 I/O性能分析
netstat/ss 详细的网络连接信息 仅限网络数据 网络连接分析

提示 #

  • 使用-A选项可以获取全面的系统性能视图,但输出可能很大
  • 使用-o选项将输出保存到文件,便于后续分析
  • 结合grepawk等工具可以过滤和处理sar的输出
  • 定期分析sar数据可以帮助识别性能趋势和异常
  • 在性能调优前,先建立基准性能数据
  • 使用-f选项可以分析过去的性能数据,有助于排查间歇性问题
  • 在虚拟化环境中,关注%steal指标以识别资源争用
  • 使用-p选项可以使输出更易读
  • 对于长期监控,考虑将sar数据导出到监控系统或数据库
  • 在分析性能问题时,同时查看多个子系统(CPU、内存、I/O、网络)的数据