sar介绍
sar是Sysstat软件包下的一个工具,使用sar必须要安装Sysstat软件包(大部分系统已默认安装并开机自启动)。
Sysstat 软件包集成如下工具:
iostat:工具提供CPU使用率及硬盘吞吐效率的数据;
mpstat:工具提供单个处理器或多个处理器相关数据;
sar:工具负责收集、报告并存储系统活跃的信息;
sa1:工具负责收集并存储每天系统动态信息到一个二进制的文件中,通过cron运行。
sa2:工具负责把每天的系统活跃性息写入总结性的报告中,通过cron运行。
sadc:是系统动态数据收集工具,收集的数据被写一个二进制的文件中,它被用作sar工具的后端;
sadf:显示被sar通过多种格式收集的数据。
本文重点对sa1、sa2、sar、sadf进行介绍。
Sysstat是一个默认自动启动的linux服务。
相关配置文件
# 默认配置文件记录保存天数
$ cat /etc/sysconfig/sysstat
# sysstat-9.0.4 configuration file.
# How long to keep log files (in days).
# If value is greater than 28, then log files are kept in
# multiple directories, one for each month.
HISTORY=28
# Compress (using gzip or bzip2) sa and sar files older than (in days):
COMPRESSAFTER=31
# Parameters for the system activity data collector (see sadc manual page)
# which are used for the generation of log files.
SADC_OPTIONS="-S DISK"
# sa1和sa2默认的cron配置
$ cat /etc/cron.d/sysstat
#每十分钟运行一次系统活动统计工具,保存到/var/log/sa/saD D表示日期
#(好像只有cpu信息,使用sadf -d /var/log/sa/sa07命令可用查看格式化数据)
*/10 * * * * root /usr/lib64/sa/sa1 1 1
# 0 * * * * root /usr/lib64/sa/sa1 600 6 &
# Generate a daily summary of process accounting at 23:53
# 每天23:53生成一天的进程统计报告,保存到/var/log/sa/sarD D表示日期
# (cat /var/log/sa/sar06 查看6号晚上保存的信息)
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命令示例
# 每隔1s查看cpu信息,共查看10次,并将数据保存在cpulog的二进制文件
$ sar -u -o cpulog 1 10
12:23:13 PM CPU %user %nice %system %iowait %steal %idle
12:23:14 PM all 0.00 0.00 0.00 0.00 0.00 100.00
12:23:15 PM all 0.00 0.00 0.00 0.00 0.00 100.00
12:23:16 PM all 0.00 0.00 0.00 0.00 0.00 100.00
12:23:17 PM all 0.00 0.00 0.00 0.00 0.00 100.00
12:23:18 PM all 0.00 0.00 0.00 0.00 0.00 100.00
12:23:19 PM all 0.25 0.00 0.00 0.00 0.00 99.75
12:23:20 PM all 0.00 0.00 0.00 0.25 0.00 99.75
12:23:21 PM all 0.00 0.00 0.25 0.00 0.00 99.75
12:23:22 PM all 0.00 0.00 0.25 0.00 0.00 99.75
12:23:23 PM all 0.00 0.00 0.00 0.00 0.00 100.00
Average: all 0.03 0.00 0.05 0.03 0.00 99.90
# 使用sadf查看格式化文件
$ sadf -d cpulog
# 查看所有cpu相关信息
$ sar -p 1 10
# 指定CPU核心查看使用情况
$ sar -P ALL 1 4
# 人性化获取设备io(device+personal)
$ sar -dp 1 4
# 获取网卡流量
$ sar -n DEV 1 4
# 获取网卡错误包
$ sar -n EDEV 1 4
sar在运维过程中的troubleshooting
CPU性能诊断
使用sar -P ALL 1 10
或sar -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 | 快速检测网络路由信息,协助定位网络异常问题。 | 功能较为单一,多为配合其他命令共同使用。 |