sar命令简介
sar(System Activity Reporter)
是系统活动情况报告的缩写。它是由sysstat
软件包提供。sar
工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据;取样数据和分析的结果都可以存入文件,所需的负载很小。 sar 是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等。为了提供不同的信息,sar 提供了丰富的选项、因此使用较为复杂。
注意:本文使用的是
sysstat
版本为sysstat-10.1.5-11.el7.x86_64
,由于sysstat
升级过程中,变动还是很大的,版本不同的话,可用参数会不同,同参数出参显示的数据项也有不同。
sar 的命令格式
sar 的命令格式为:
Usage: sar [ options ] [ <interval> [ <count> ] ]
Options are:
[ -A ] [ -B ] [ -b ] [ -C ] [ -d ] [ -H ] [ -h ] [ -p ] [ -q ] [ -R ]
[ -r ] [ -S ] [ -t ] [ -u [ ALL ] ] [ -V ] [ -v ] [ -W ] [ -w ] [ -y ]
[ -I { <int> [,...] | SUM | ALL | XALL } ] [ -P { <cpu> [,...] | ALL } ]
[ -m { <keyword> [,...] | ALL } ] [ -n { <keyword> [,...] | ALL } ]
[ -j { ID | LABEL | PATH | UUID | ... } ]
[ -f [ <filename> ] | -o [ <filename> ] | -[0-9]+ ]
[ -i <interval> ] [ -s [ <hh:mm:ss> ] ] [ -e [ <hh:mm:ss> ] ]
其中:
- interval : 为取样时间间隔
- count : 为输出次数,若省略此项,默认值为 1
常用选项说明:
选项 | 说明 |
---|---|
-A | 等同于-bBdHqrRSuvwWy -I SUM -I XALL -m ALL -n ALL -u ALL -P ALL |
-b | 显示I/O和传送速率的统计信息 |
-B | 输出内存页面的统计信息 |
-C | 当从一个文件读取数据时,告诉sar显示评论xx sadc |
-d | 报告每个块设备的活动情况,每个块设备是以dev m-n来显示的,m是major number,n是minor number,也可以使块设备名称显示的更友好一些,那就是采用-p参数 |
-H | 报告拒页的使用情况 |
-h | 显示帮助 |
-p | 显示友好设备名字,以方便查看,也可以和-d 和-n 参数结合使用,比如 -dp 或-np |
-q | 输出进程队列长度和平均负载状态统计信息 |
-R | 输出内存页面的统计信息 |
-r | 输出内存和交换空间的统计信息 |
-S | 报告swap的使用情况 |
-t | 读取 /var/log/sa/saDD 的数据时显示其中记录的原始时间,如果没有这个参数使用用户的本地时间 |
-u | 输出CPU使用情况的统计信息 |
-V | 输出版本号信息 |
-v | 输出inode、文件和其他内核表的统计信息 |
-W | 输出系统交换的统计信息 |
-w | 输出系统交换活动信息 |
-y | 输出TTY设备的活动信息 |
-I { irq | SUM | ALL | XALL } | 输出指定中断的统计信息。 |
irq | 指定中断号 |
SUM | 指定输出每秒接收到的中断总数 |
ALL | 指定输出前16个中断 |
XALL | 指定输出全部的中断信息 |
-P {cpu | ALL} | 输出指定 CPU 的统计信息 |
-m | 报告电源管理统计信息,参数可以是CPU, FAN, FREQ, IN, TEMP and USB或者ALL |
-n { DEV | EDEV | NFS | NFSD | SOCK | ALL } | 分析输出网络设备状态统计信息。 |
DEV | 报告网络设备的统计信息 |
EDEV | 报告网络设备的错误统计信息 |
NFS | 报告 NFS 客户端的活动统计信息 |
NFSD | 报告 NFS 服务器的活动统计信息 |
SOCK | 报告网络套接字(sockets)的使用统计信息 |
ALL | 报告所有类型的网络活动统计信息 |
-j | 显示持久化设备名称 |
-f filename | 从文件 filename 读取数据信息。filename 是使用-o 选项时生成的文件。 |
-o filename | 将输出信息保存到文件 filename |
-i | interval 指定间隔时长,单位为秒 |
-s hh:mm:ss | 指定输出统计数据的起始时间 |
-e hh:mm:ss | 指定输出统计数据的截至时间,默认为18:00:00 |
常用命令举例
1、输出CPU使用情况的统计信息
命令:sar
和 sar -u
输出:
[root@localhost tmp]# sar
Linux 3.10.0-514.21.1.el7.x86_64 (localhost) 07/14/2017 _x86_64_ (8 CPU)
11:44:56 PM CPU %user %nice %system %iowait %steal %idle
11:44:58 PM all 0.20 0.00 1.37 0.00 0.00 98.43
11:45:00 PM all 0.00 0.07 1.01 0.00 0.00 98.93
11:45:02 PM all 0.06 0.00 1.00 0.00 0.00 98.94
Average: all 0.09 0.02 1.12 0.00 0.00 98.77
[root@localhost tmp]# sar -u
Linux 3.10.0-514.21.1.el7.x86_64 (localhost) 07/14/2017 _x86_64_ (8 CPU)
11:44:56 PM CPU %user %nice %system %iowait %steal %idle
11:44:58 PM all 0.20 0.00 1.37 0.00 0.00 98.43
11:45:00 PM all 0.00 0.07 1.01 0.00 0.00 98.93
11:45:02 PM all 0.06 0.00 1.00 0.00 0.00 98.94
Average: all 0.09 0.02 1.12 0.00 0.00 98.77
输出项说明:
选项 | 说明 |
---|---|
CPU | all 表示统计信息为所有 CPU 的平均值。 |
%user | 显示在用户级别(application)运行使用 CPU 总时间的百分比。 |
%nice | 显示在用户级别,用于nice操作,所占用 CPU 总时间的百分比。 |
%system | 在核心级别(kernel)运行所使用 CPU 总时间的百分比。 |
%iowait | 显示用于等待I/O操作占用 CPU 总时间的百分比。 |
%steal | 管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟 CPU 的百分比。 |
%idle | 显示 CPU 空闲时间占用 CPU 总时间的百分比。 |
1. 若 %iowait
的值过高,表示硬盘存在I/O
瓶颈
2. 若 %idle
的值高但系统响应慢时,有可能是 CPU
等待分配内存,此时应加大内存容量
3. 若 %idle
的值持续低于 10
,则系统的 CPU
处理能力相对较低,表明系统中最需要解决的资源是 CPU
。
2、显示I/O和传送速率的统计信息
命令:sar -b
输出:
[root@localhost tmp]# sar -b
Linux 3.10.0-514.21.1.el7.x86_64 (localhost) 07/14/2017 _x86_64_ (8 CPU)
11:44:56 PM tps rtps wtps bread/s bwrtn/s
11:44:58 PM 0.00 0.00 0.00 0.00 0.00
11:45:00 PM 2.00 0.00 2.00 0.00 74.00
11:45:02 PM 0.00 0.00 0.00 0.00 0.00
11:50:01 PM 0.75 0.00 0.74 0.21 18.38
Average: 0.75 0.00 0.74 0.21 18.50
输出项说明:
选项 | 说明 |
---|---|
tps | 每秒钟物理设备的 I/O 传输总量 |
rtps | 每秒钟从物理设备读入的数据总量 |
wtps | 每秒钟向物理设备写入的数据总量 |
bread/s | 每秒钟从物理设备读入的数据量,单位为 (块/s) |
bwrtn/s | 每秒钟向物理设备写入的数据量,单位为 (块/s) |
3、输出内存页面的统计信息
命令:sar -B
输出:
[root@localhost tmp]# sar -B
Linux 3.10.0-514.21.1.el7.x86_64 (localhost) 07/14/2017 _x86_64_ (8 CPU)
11:44:56 PM pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff
11:44:58 PM 0.00 0.00 12698.50 0.00 5274.50 0.00 0.00 0.00 0.00
11:45:00 PM 0.00 69.00 13500.50 0.00 5110.50 0.00 0.00 0.00 0.00
11:45:02 PM 0.00 0.00 12432.50 0.00 5129.00 0.00 0.00 0.00 0.00
11:50:01 PM 0.12 12.05 12806.55 0.00 5292.63 0.00 0.00 0.00 0.00
Average: 0.12 12.26 12807.94 0.00 5290.25 0.00 0.00 0.00 0.00
输出项说明:
选项 | 说明 |
---|---|
pgpgin/s | 每秒从磁盘或SWAP置换到内存的字节数(KB) |
pgpgout/s | 每秒从内存置换到磁盘或SWAP的字节数(KB) |
fault/s | 每秒钟系统产生的缺页数,即主缺页与次缺页之和(major + minor) |
majflt/s | 每秒钟产生的主缺页数 |
pgfree/s | 每秒被放入空闲队列中的页个数 |
pgscank/s | 每秒被kswapd扫描的页个数 |
pgscand/s | 每秒直接被扫描的页个数 |
pgsteal/s | 每秒钟从cache中被清除来满足内存需要的页个数 |
%vmeff | 每秒清除的页(pgsteal)占总扫描页(pgscank+pgscand)的百分比 |
4、输出网络设备状态的统计信息
命令:sar -n DEV |grep ens33
输出:
[root@localhost tmp]# sar -n DEV |grep ens33
Linux 3.10.0-514.21.1.el7.x86_64 (localhost) 07/15/2017 _x86_64_ (8 CPU)
12:00:01 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
12:10:03 AM ens33 137.51 49.60 196.77 3.34 0.00 0.00 0.00
Average: ens33 137.51 49.60 196.77 3.34 0.00 0.00 0.00
输出项说明:
选项 | 说明 |
---|---|
IFACE | 网络设备名 |
rxpck/s | 每秒接收的包总数 |
txpck/s | 每秒传输的包总数 |
rxbyt/s | 每秒接收的字节(byte)总数 |
txbyt/s | 每秒传输的字节(byte)总数 |
rxcmp/s | 每秒接收压缩包的总数 |
txcmp/s | 每秒传输压缩包的总数 |
rxmcst/s | 每秒接收的多播(multicast)包的总数 |
5、输出网络设备状态的统计信息(查看网络设备故障)
命令:sar -n EDEV |egrep 'ens33|IFACE'
输出:
[root@localhost tmp]# sar -n EDEV |egrep 'ens33|IFACE'
Linux 3.10.0-514.21.1.el7.x86_64 (localhost) 07/15/2017 _x86_64_ (8 CPU)
12:00:01 AM IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s
12:10:03 AM ens33 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: ens33 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
输出项说明:
选项 | 说明 |
---|---|
IFACE | 网络设备名 |
rxerr/s | 每秒接收的坏包总数 |
txerr/s | 传输包时每秒发生错误的总数 |
coll/s | 传输包时每秒发生冲突(collision)的总数 |
rxdrop/s | 接收包时,由于缺乏缓存,每秒丢弃(drop)包的数量 |
txdrop/s | 传输包时,由于缺乏缓存,每秒丢弃(drop)包的数量 |
txcarr/s | 传输包时,每秒发生的传输错误(carrier-error)的数量 |
rxfram/s | 接收包时,每秒发生帧校验错误(frame alignment error)的数量 |
rxfifo/s | 接收包时,每秒发生队列(FIFO)一出错误的数量 |
txfifo/s | 传输包时,每秒发生队列(FIFO)一出错误的数量 |
6、输出进程队列长度和平均负载状态统计信息
命令:sar -q
输出:
[root@localhost tmp]# sar -q
Linux 3.10.0-514.21.1.el7.x86_64 (localhost) 07/15/2017 _x86_64_ (8 CPU)
12:00:01 AM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
12:10:03 AM 4 793 1.99 0.87 0.36 0
12:20:01 AM 0 786 0.07 1.06 0.94 0
Average: 2 790 1.03 0.96 0.65 0
输出项说明:
选项 | 说明 |
---|---|
runq-sz | 运行队列的长度(等待运行的进程数) |
plist-sz | 进程列表中进程(processes)和线程(threads)的数量 |
ldavg-1 | 最后1分钟的系统平均负载(System load average) |
ldavg-5 | 过去5分钟的系统平均负载 |
ldavg-15 | 过去15分钟的系统平均负载 |
blocked | 当前阻塞的进程数量,在等待IO完成 |
7、输出内存和交换空间的统计信息
命令:sar -r
输出:
[root@localhost tmp]# sar -r
Linux 3.10.0-514.21.1.el7.x86_64 (localhost) 07/15/2017 _x86_64_ (8 CPU)
12:00:01 AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
12:10:03 AM 124276 3741260 96.79 4 1937072 4287964 54.08 1493264 1832796 21040
12:20:01 AM 127180 3738356 96.71 4 1957320 4213484 53.14 2064572 1254212 28
12:30:01 AM 125612 3739924 96.75 4 1959696 4213428 53.14 2069716 1251092 24
Average: 125689 3739847 96.75 4 1951363 4238292 53.45 1875851 1446033 7031
输出项说明:
选项 | 说明 |
---|---|
kbmemfree | 可用的空闲内存,单位是KB |
kbmemused | 已经使用的内存,这个没有考虑内核自己用到的内存 |
%memused | 目前内存的使用率 |
kbbuffers | 内核缓冲区(buffer)使用的内存数量,单位为 KB |
kbcached | 内核高速缓存(cache)数据使用的内存数量,单位为 KB |
kbcommit | 当前工作负载锁需要的内存,这是一个估计值,多少RAM/swap可以保证当前负载不会出现out of memory |
%commit | 当前工作负载需要的内存占RAM+swap的百分比 |
kbactive | 活跃内存的大小(内存最近被使用过,并且不会被回收) |
kbinact | 不活跃内存大小(最近未被使用的内存,很符合回收策略的内存) |
kbdirty | 等待写回硬盘的内存数量 |
8、输出内存页面的统计信息
命令:sar -R
输出:
[root@localhost tmp]# sar -R
Linux 3.10.0-514.21.1.el7.x86_64 (localhost) 07/15/2017 _x86_64_ (8 CPU)
12:00:01 AM frmpg/s bufpg/s campg/s
12:10:03 AM -51.20 0.00 36.83
12:20:01 AM 1.21 0.00 8.46
12:30:01 AM -0.65 0.00 0.99
Average: -16.93 0.00 15.46
输出项说明:
选项 | 说明 |
---|---|
frmpg/s | 每秒系统中空闲的内存页面(memory page freed)数量 |
bufpg/s | 每秒系统中用作缓冲区(buffer)的附加内存页面(additional memory page)数量 |
campg/s | 每秒系统中高速缓存的附加内存页面(additional memory pages cached)数量 |
9、输出inode、文件和其他内核表的信息
命令:sar -v
输出:
[root@localhost tmp]# sar -v
Linux 3.10.0-514.21.1.el7.x86_64 (localhost) 07/15/2017 _x86_64_ (8 CPU)
12:00:01 AM dentunusd file-nr inode-nr pty-nr
12:10:03 AM 56436 3104 41378 12
12:20:01 AM 86494 2976 41368 12
12:30:01 AM 86927 2880 41723 12
Average: 76619 2987 41490 12
输出项说明:
选项 | 说明 |
---|---|
dentunusd | 目录高速缓存中未被使用的条目数量 |
file-nr | 被系统使用的文件句柄数 |
inode-nr | 被系统使用的inode句柄数 |
pty-nr | 被系统使用的pseudo-terminals数目 |
10、输出系统交换活动信息
命令:sar -w
输出:
[root@localhost tmp]# sar -w
Linux 3.10.0-514.21.1.el7.x86_64 (localhost) 07/15/2017 _x86_64_ (8 CPU)
12:00:01 AM proc/s cswch/s
12:10:03 AM 39.37 3535.95
12:20:01 AM 45.08 3450.30
12:30:01 AM 45.16 3429.46
12:40:01 AM 44.97 3417.48
Average: 43.64 3458.36
输出项说明:
选项 | 说明 |
---|---|
proc/s | 每秒钟创建的进程数 |
cswch/s | 每秒钟的上下文交换数 |
11、 输出系统交换的统计信息
命令:sar -W
输出:
[root@localhost tmp]# sar -W
Linux 3.10.0-514.21.1.el7.x86_64 (localhost) 07/15/2017 _x86_64_ (8 CPU)
12:00:01 AM pswpin/s pswpout/s
12:10:03 AM 0.01 1.16
12:20:01 AM 0.01 0.00
12:30:01 AM 0.01 0.00
12:40:01 AM 0.01 0.00
Average: 0.01 0.29
输出项说明:
选项 | 说明 |
---|---|
pswpin/s | 每秒钟系统引入的swap pages |
pswpout/s | 每秒钟系统换出的swap pages |
12、输出TTY设备的活动信息
命令:sar -y
输出:
[root@localhost tmp]# sar -y
Linux 3.10.0-514.21.1.el7.x86_64 (localhost) 07/15/2017 _x86_64_ (8 CPU)
12:00:01 AM TTY rcvin/s xmtin/s framerr/s prtyerr/s brk/s ovrun/s
12:10:03 AM 0 0.00 0.00 0.00 0.00 0.00 0.00
12:20:01 AM 0 0.00 0.00 0.00 0.00 0.00 0.00
12:30:01 AM 0 0.00 0.00 0.00 0.00 0.00 0.00
12:40:01 AM 0 0.00 0.00 0.00 0.00 0.00 0.00
Average: 0 0.00 0.00 0.00 0.00 0.00 0.00
输出项说明:
选项 | 说明 |
---|---|
TTY | TTY 串行设备号 |
rcvin/s | 每秒接收的中断数量 |
xmtin/s | 每秒传送的中断数量 |
framerr/s | 每秒发生的帧错误数(frame error)量 |
prtyerr/s | 每秒发生的奇偶校验错误(parity error)数量 |
brk/s | 每秒发生的暂停(break)数量 |
ovrun/s | 每秒发生的溢出错误(overrun error)数量 |
14、显示全面的累计统计信息
命令:sar -y
输出所有信息。
另:命令的详细用法可以参考项目源码