sar介绍

sar是Sysstat软件包下的一个工具,使用sar必须要安装Sysstat软件包(大部分系统已默认安装并开机自启动)。
Sysstat 软件包集成如下工具:

  • iostat:工具提供CPU使用率及硬盘吞吐效率的数据;

  • mpstat:工具提供单个处理器或多个处理器相关数据;

  • sar:工具负责收集、报告并存储系统活跃的信息;

  • sa1:工具负责收集并存储每天系统动态信息到一个二进制的文件中,通过cron运行。

  • sa2:工具负责把每天的系统活跃性息写入总结性的报告中,通过cron运行。

  • sadc:是系统动态数据收集工具,收集的数据被写一个二进制的文件中,它被用作sar工具的后端;

  • sadf:显示被sar通过多种格式收集的数据。

本文重点对sa1、sa2、sar、sadf进行介绍。

Sysstat是一个默认自动启动的linux服务。

相关配置文件

  1. # 默认配置文件记录保存天数
  2. $ cat /etc/sysconfig/sysstat
  3. # sysstat-9.0.4 configuration file.
  4. # How long to keep log files (in days).
  5. # If value is greater than 28, then log files are kept in
  6. # multiple directories, one for each month.
  7. HISTORY=28
  8. # Compress (using gzip or bzip2) sa and sar files older than (in days):
  9. COMPRESSAFTER=31
  10. # Parameters for the system activity data collector (see sadc manual page)
  11. # which are used for the generation of log files.
  12. SADC_OPTIONS="-S DISK"
  13. # sa1和sa2默认的cron配置
  14. $ cat /etc/cron.d/sysstat
  15. #每十分钟运行一次系统活动统计工具,保存到/var/log/sa/saD D表示日期
  16. #(好像只有cpu信息,使用sadf -d /var/log/sa/sa07命令可用查看格式化数据)
  17. */10 * * * * root /usr/lib64/sa/sa1 1 1
  18. # 0 * * * * root /usr/lib64/sa/sa1 600 6 &
  19. # Generate a daily summary of process accounting at 23:53
  20. # 每天23:53生成一天的进程统计报告,保存到/var/log/sa/sarD D表示日期
  21. # (cat /var/log/sa/sar06 查看6号晚上保存的信息)
  22. 53 23 * * * root /usr/lib64/sa/sa2 -A

sar基本使用

sar(System Activity Reporter系统活动情况报告)是目前 Linux上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘 I/O、CPU 效率、内存使用状况、进程活动等。

1,sar命令常用格式

sar [options] [-A] [-o file] t [n]

2,sar功能选择项介绍

sar功能选择汇总
序号 选项 功能描述 重要程度
1 -A 所有报告的汇总
2 -b 缓冲区使用情况
3 -B 监控内存分页情况
4 -d 磁盘IO基本统计
5 -e 设置报告的结束时间。这个选项可以在将数据从或写入文件时使用(选项-f或-o)
6 -f 从文件名中查看记录与-o搭配使用
7 -h 显示帮助信息
8 -i 获取报告的时间间隔
9 -I 输出指定中断的统计信息
10 -m CPU时钟频率信息
11 -n 网络接口的统计信息
12 -o 将输出信息保存到文件
13 -p 显示友好设备名字,以方便查看,也可以和-d 和-n 参数结合使用,比如 -dp 或-n
14 -q 进程队列长度和平均负载状态信息
15 -r 输出内存和交换空间的统计信息
16 -R 输出内存页面的统计信息
17 -s 设置数据的开始时间,这个选项只能在数据时使用从文件中读取(选项-f)。
18 -S 报告交换空间利用率统计数据
19 -t 读取 /var/log/sa/saDD 的数据时显示其中记录的原始时间,如果没有这个参数使用用户的本地时间
20 -u 输出CPU使用情况的统计信息
21 -v 输出inode、文件和其他内核表的统计信息
22 -V 输出版本号信息
23 -w 输出系统交换活动信息
24 -W 系统所带来的交换页面信息统计
25 -y 终端设备活动情况

3,sar命令示例

  1. # 每隔1s查看cpu信息,共查看10次,并将数据保存在cpulog的二进制文件
  2. $ sar -u -o cpulog 1 10
  3. 12:23:13 PM CPU %user %nice %system %iowait %steal %idle
  4. 12:23:14 PM all 0.00 0.00 0.00 0.00 0.00 100.00
  5. 12:23:15 PM all 0.00 0.00 0.00 0.00 0.00 100.00
  6. 12:23:16 PM all 0.00 0.00 0.00 0.00 0.00 100.00
  7. 12:23:17 PM all 0.00 0.00 0.00 0.00 0.00 100.00
  8. 12:23:18 PM all 0.00 0.00 0.00 0.00 0.00 100.00
  9. 12:23:19 PM all 0.25 0.00 0.00 0.00 0.00 99.75
  10. 12:23:20 PM all 0.00 0.00 0.00 0.25 0.00 99.75
  11. 12:23:21 PM all 0.00 0.00 0.25 0.00 0.00 99.75
  12. 12:23:22 PM all 0.00 0.00 0.25 0.00 0.00 99.75
  13. 12:23:23 PM all 0.00 0.00 0.00 0.00 0.00 100.00
  14. Average: all 0.03 0.00 0.05 0.03 0.00 99.90
  15. # 使用sadf查看格式化文件
  16. $ sadf -d cpulog
  17. # 查看所有cpu相关信息
  18. $ sar -p 1 10
  19. # 指定CPU核心查看使用情况
  20. $ sar -P ALL 1 4
  21. # 人性化获取设备io(device+personal)
  22. $ sar -dp 1 4
  23. # 获取网卡流量
  24. $ sar -n DEV 1 4
  25. # 获取网卡错误包
  26. $ sar -n EDEV 1 4

sar在运维过程中的troubleshooting

CPU性能诊断

使用sar -P ALL 1 10sar -u 1 10来获取10s内的cpu使用信息。

参数 参数含义
CPU all 表示统计信息为所有 CPU 的平均值。
%user 显示在用户级别(application)运行使用 CPU 总时间的百分比。
%nice 显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。
%system 在核心级别(kernel)运行所使用 CPU 总时间的百分比。
%iowait 显示用于等待I/O操作占用 CPU 总时间的百分比。
%steal 管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。
%idle 显示 CPU 空闲时间占用 CPU 总时间的百分比。

mem性能诊断

使用sar -r 1 10来查看10s内的内存使用情况。

参数 参数含义
kbmemfree 这个值和free命令中的free值基本一致,所以它不包括buffer和cache的空间.
kbmemused 这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间.
%memused 这个值是kbmemused和内存总量(不包括swap)的一个百分比.
kbbuffers和kbcached 这两个值就是free命令中的buffer和cache.
kbcommit 保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap).
%commit 这个值是kbcommit与内存总量(包括swap)的一个百分比.

disk性能诊断

使用sar -dp 1 10来获取10s内的磁盘相关信息。

参数 参数含义
tps 每秒从物理磁盘I/O的次数.
rd_sec/s 每秒读扇区的次数.
wr_sec/s 每秒写扇区的次数.
avgrq-sz 平均每次设备I/O操作的数据大小(扇区).
avgqu-sz 磁盘请求队列的平均长度.
await 从请求磁盘操作到系统完成处理,每次请求的平均消耗时间.
svctm 系统处理每次请求的平均时间,不包括在请求队列中消耗的时间.
%util I/O请求占CPU的百分比,比率越大,说明越饱和.

net性能诊断

sar提供4中不同的选项来显示网络的统计信息,通过-n选项指定4个不同类型的开关DEV/EDEV/SOCK/FULL、DEV显示网络接口进行,EDEV显示网络错误的统计数据,SOCK显示套接字信息,FULL显示所有4个开关。

使用sar -n [type] 1 10来查看某种类型下的网络状况。

参数 参数含义
IFACE 就是网络设备的名称;
rxpck/s 每秒钟接收到的包数目
txpck/s 每秒钟发送出去的包数目
rxbyt/s 每秒钟接收到的字节数
txbyt/s 每秒钟发送出去的字节数
rxcmp/s 每秒钟接收到的压缩包数目
txcmp/s 每秒钟发送出去的压缩包数目
txmcst/s 每秒钟接收到的多播包的包数目

sar的优势以及与其他相关命令的对比

  • 在报表结尾显示平均统计值。

  • 动态检测创建或注册的新设备(磁盘,网络接口等)。

  • 支持UP和SMP机器,包括具有超线程或多核处理器的机器。

  • 支持热插拔CPU(它自动检测被禁用或启用的处理器)和无点击CPU。

  • 适用于许多不同的架构,无论是32位还是64位。

  • 需要很少的CPU时间运行(用C写)。

  • sar/sadc收集的系统统计信息可以保存在文件中,以备将来检查。您可以配置要保留的数据历史记录的长度。此历史记录长度没有限制,但存储设备上的可用空间不限。

  • 由sar/sadc收集的系统统计信息可以以各种不同的格式(CSV,XML,JSON,SVG等)导出。

类型 命令 优势 不足
cpu查询 sar -u 能够查询当前和历史cpu信息,能够基于不同的cpu进行单独统计,能够分间隔多次查询,具有使用率百分比信息。 相比其他指令消耗cpu略高,无法关联进程信息
vmstat 快速宏观的对系统整体情况进行查看,能够分间隔多次查询 指标显示多,无法快速发现问题,无使用率计算。
iostat iostat -c查看cpu平均信息 只能查看查看cpu平均信息
uptime 快速查看平均负载情况 只能查看平均负载情况,无其他信息
内存查询 sar -r 人性化,不仅给出内存使用量,还给出了使用百分比及统计的平均值。 相比其他指令消耗cpu略高,无法关联进程信息
free 简单便捷,实用性强快速定位问题 无法查询历史信息,不直接展示使用率,对cache不太懂的同学容易计算错误真正内存使用率。
vmstat 快速宏观的对系统整体情况进行查看,能够分间隔多次查询 结果输出多,无法直接查看内存使用率
watch watch -n 3 -d free动态监控内存情况 与free相同,只是能够自动重复执行free
磁盘IO查询 sar -d 指标展示最全,包括其他2项指令的相关信息,可对历史数据、平均指标进行展示,对各设备使用率进行展示。 相比其他指令消耗cpu略高
iostat -d 能够对数据块每秒的读写数据块情况、读取总量进行清晰统计 统计的指标少,缺少整体使用百分比的展示
vmstat -d 通过读、写、IO三个模块对指标进行展示,较为清晰。 无法查询历史指标
网络信息 sar -n 通过-n选项指定4个不同类型的开关DEV/EDEV/SOCK/FULL、DEV显示网络接口进行,EDEV显示网络错误的统计数据,SOCK显示套接字信息,FULL显示所有4个开关。 相比其他指令消耗cpu略高
ping 快速定位网络连通性,是否丢包 功能较为单一,多为配合其他命令共同使用。
netstat -I 展示的指标多,快速定位网卡设备是否存在故障和瓶颈,对网络质量进行分析评估。 只能查看实时数据。
netstat -r 快速检测网络路由信息,协助定位网络异常问题。 功能较为单一,多为配合其他命令共同使用。