sar指令的使用与源码解析 - 每周指令
sar 的全称是 System Activity Reporter(系统活动情况报告)的缩写。sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据;取样数据分析的结果都可以存入文件, 所需的负载很小。sar是目前 Linux 上最为全面的系统性能分析工具之一,可以从 14 个大方面对系统的活动进行报告,包括文件的读写情况、系统调用的使用情况、串口、CPU 效率、内存使用状况、进程活动及IPC有关的活动等,使用也是较为复杂。
一、简介
sar是查看操作系统报告指标的各种工具中,最为普遍和方便的;它有两种用法;
- 追溯过去的统计数据(默认)
- 周期性的查看当前数据
sar只是sysstat(最新版本为v12.1.6)软件包中的一个工具,sar相关的工具还包括sadc、sa1、sa2:
sadc:系统动态数据收集工具,收集的数据被写入一个二进制文件中,它是sar工具后端;sa1:将每日的系统活动信息以二进制数据的形式写入到文件中,由cron调用,默认的cron作业位于/etc/cron.d/sysstat;sa2:在/var/log/sa目录中每日写入一个报告,由cron调用,默认的cron作业位于/etc/cron.d/sysstat;sar:负责解析sadc保存的数据,并显示出来;
二、源码分析
2.1、sadc:系统动态数据采集工具
文件:
sadc.c(rw_sa_stat_loop()函数和read_stats()函数) 和activity.c(act[]结构体);功能:解析参数、启动一个interval alarm、rw_sa_stat_loop()读取数据;
核心函数/代码:
rw_sa_stat_loop():整个sadc的核心循环,这里从个sysfs读取信息,并提取关键信息,然后保存;read_stats():核心采集数据函数,核心数据结构式act[];act[]:存放了所有统计事件的struct activity;
代码解析:
|
|
2.2、sar显示统计信息
- 文件:
sar.c - 核心函数/代码:
read_sadc_stat_bunch():读取act结构体中统计信息;write_stats():调用每个struct activity的f_print()函数;write_stats_avg():调用每个struct activity的f_print_avg()函数;
- 代码解析:
|
|
|
|
三、参数解析
3.1、参数列表(演示版本为10.1.5):
|
3.2、参数含义解析:
sar -c 1 10:执行sar -c指令共10次,每隔1秒执行1次;
|
四、详细数据指标解析
4.1、查看CPU的利用率
指令:sar -u,该参数与sar -C,sar -p,sar 的输出信息一致。

数据指标解析:
%user:用户模式下消耗的CPU时间的比例;%nice:通过nice改变了进程调度优先级的进程,在用户模式下消耗的CPU时间的比例;%system:系统模式下消耗的CPU时间的比例;%iowait:CPU等待磁盘I/O导致空闲状态消耗的时间比例;%steal:利用Xen等操作系统虚拟化技术,等待其它虚拟CPU计算占用的时间比例;%idle:CPU空闲时间比例;
4.2、队列长度和平均负载(队列信息)
指令:sar -q,查看运行队列中的进程数、系统上的进程大小、平均负载等,与其它命令相比,它能查看各项指标随时间变化的情况;

数据指标解析:
runq-sz:运行队列的长度(等待运行的进程数);plist-sz:进程列表中进程(processes)和线程(threads)的数量;ldavg-1:最后1分钟的系统平均负载;ldavg-5:过去5分钟的系统平均负载;ldavg-15:过去15分钟的系统平均负载;blocked:
4.3、内存利用率
指令:sar -r

数据指标解析:
kbmemfree:这个值和free命令中的free值基本一致,不包括buffer和cache的空间;kbmemused:这个值和free命令中的used值基本一致,包括buffer和cache的空间;%memused:物理内存使用率,这个值是kbmemused和内存总量(不包括swap)的一个百分比;kbbuffers:对应free命令中的buffer;kbcached:对应free命令中的cache;kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap);%commit:这个值是kbcommit与内存总量(包括swap)的一个百分比;kbactive:kbinact:kbdirty:
4.4、页面交换情况
指令:sar -W,页面发生交换时,服务器的吞吐量会大幅下降;服务器状况不良时,如果怀疑因为内存不足而导致了页面交换的发生,可以使用这个命令来确认是否发生了大量的交换;

数据指标解析:
- pswpin/s:每秒系统换入的交换页面(swap page)数量;
- pswpout/s:每秒系统换出的交换页面(swap page)数量;
4.5、分页情况
指令:sar -B

数据指标解析:
- pgpgin/s:
- pgpgout/s:
- fault/s:
- majflt/s:
- pgfree/s:
- pgscank/s:
- pgscand/s:
- pgsteal/s:
- %vmeff:
4.6、I/O 和传输速率信息情况
指令:sar -b

数据指标解析:
tps:每秒钟物理设备的 I/O 传输总量;rtps:每秒钟从物理设备读入的数据总量;wtps:每秒钟向物理设备写入的数据总量;bread/s:每秒钟从物理设备读入的数据量,单位为 块/s;bwrtn/s:每秒钟向物理设备写入的数据量,单位为 块/s;
4.7、块设备信息
指令:sar -d

数据指标解析:
DEV:正在监视的块设备;tps:每秒钟物理设备的 I/O 传输总量;rd_sec/s:每秒从设备读取的扇区(sector)数量;wr_sec/s:每秒向设备写入的扇区(sector)数量;avgrq-sz:发给设备请求的平均扇区数;avgqu-sz:发给设备请求的平均队列长度;await:设备 I/O 请求的平均等待时间(单位为毫秒);svctm:设备 I/O 请求的平均服务时间(单位为毫秒);%util:在 I/O 请求发送到设备期间,占用 CPU 时间的百分比,用于体现设备的带宽利用率;
4.8、大页信息
指令:sar -H

数据指标解析:
kbhugfree:kbhugused:%hugused:
4.9、内存状况
指令:sar -R

数据指标解析:
frmpg/s:每秒系统中空闲的内存页面(memory page freed)数量;bufpg/s:每秒系统中用作缓冲区(buffer)的附加内存页面(additional memory page)数量;campg/s:每秒系统中高速缓存的附加内存页面(additional memory pages cached)数量;
4.10、交换空间利用信息
指令:sar -S

数据指标解析:
kbswpfree:可用的空闲交换空间数量,单位为 KB;kbswpused:已使用的交换空间数量,单位为 KB;kbswpcad:交换空间的高速缓存使用的内存数量;%swpcad:
4.11、动态CPU信息
指令:sar -t interval,按照给定的interval的值,循环打印CPU的信息。

数据指标解析:
CPU:all 表示统计信息为所有 CPU 的平均值;%user:显示在用户级别(application)运行使用 CPU 总时间的百分比;%nice:显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比;%system:在核心级别(kernel)运行所使用 CPU 总时间的百分比;%iowait:显示用于等待I/O操作占用 CPU 总时间的百分比;%steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比;%idle:显示 CPU 空闲时间占用 CPU 总时间的百分比;
4.12、Kernel Table 信息
指令:sar -v

数据指标解析:
dentunusd:目录高速缓存中未被使用的条目数量;file-nr:inode-nr:pty-nr:
4.13、任务创建与系统转换统计信息
指令:sar -w

数据指标解析:
proc/s:每秒钟创建的进程数;cswch/s:
4.14、TTY 设备信息
指令:sar -y

数据指标解析:
TTY:rcvin/s:每秒接收的中断数量;xmtin/s:每秒传送的中断数量;framerr/s:每秒发生的帧错误数(frame error)量;prtyerr/s:每秒发生的奇偶校验错误(parity error)数量;brk/s:每秒发生的暂停(break)数量;ovrun/s:每秒发生的溢出错误(overrun error)数量;
4.15、网络统计信息
指令:sar -n keyword,其中keyword可选项如参数含义解析中所列。

IFACE:rxpck/s:txpck/s:rxKB/s:txKB/s:rxcmp/s:txcmp/s:rxmcst/s:
4.16、性能问题排查技巧
- 怀疑 CPU 存在瓶颈:可用
sar -u和sar -q等来查看 - 怀疑内存存在瓶颈:可用
sar -B、sar -r和sar -W等来查看 - 怀疑 I/O 存在瓶颈:可用
sar -b、sar -u和sar -d等来查看




