sar(System Activity Reporter系统活动情况报告)是目前Linux上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况
磁盘IO、CPU效率、没存使用状况、进程活动及IPC有关的活动等。
sar命令常用格式
sar [options] [-A] [-o file] t [n]
其中:
t为采样间隔,n为采样次数,默认值是1;
-o file表示将命令结果以二进制格式存放在文件中,file 是文件名。
用法: sar [ 选项 ] [ <时间间隔> [ <次数> ] ]
Options are:
[ -A ] [ -b ] [ -B ] [ -C ] [ -d ] [ -h ] [ -m ] [ -p ] [ -q ] [ -r ] [ -R ]
[ -S ] [ -t ] [ -u [ ALL ] ] [ -v ] [ -V ] [ -w ] [ -W ] [ -y ]
[ -I { <int> [,...] | SUM | ALL | XALL } ] [ -P { <cpu> [,...] | ALL } ]
[ -j { ID | LABEL | PATH | UUID | ... } ] [ -n { <keyword> [,...] | ALL } ]
[ -o [ <filename> ] | -f [ <filename> ] ] [ --legacy ]
[ -i <interval> ] [ -s [ <hh:mm:ss> ] ] [ -e [ <hh:mm:ss> ] ]
-A:所有报告的总和
-u:输出CPU使用情况和统计信息
-v:输出inode、文件和其他内核表的统计信息
-d:输出每一个块设备的活动信息
-r:输出内存和交换空间的统计信息
-b:显示I/O和传送速率的统计信息
-a:文件读写情况
-c:输出进程统计信息,每秒创建的进程数
-R:输出内存页面的统计信息
-y:终端设备活动情况
-w:输出系统交换活动信息
1、CPU资源监控
例如,每5秒钟采样一次,连续采样3次,观察CPU的使用情况,并将采样结果以二进制形式存入当前目录下的文件test中,使用如下所示的命令
sar -u -o test 5 3
命令执行后显示如下:
[[email protected] ~]# sar -u -o test 5 3
Linux 2.6.32-431.el6.x86_64 (localhost.localdomain) 2017年06月16日 _x86_64_ (2 CPU)
14时49分20秒 CPU %user %nice %system %iowait %steal %idle
14时49分25秒 all 0.00 0.00 0.20 0.00 0.00 99.80
14时49分30秒 all 0.00 0.00 0.50 0.00 0.00 99.50
14时49分35秒 all 0.00 0.00 0.20 0.00 0.00 99.80
平均时间: all 0.00 0.00 0.30 0.00 0.00 99.70
输出项说明:
CPU:all 表示统计信息为所有CPU的平均值
%user:显示在用户级别运行使用CPU总时间的百分比
%nice:显示在用户级别,用于nice操作,所占用CPU总时间的百分比
%system:在系统级别运行所使用CPU总时间的百分比
%iowait:显示用于等待I/O操作占用CPU时间的百分比
%steal:管理程序为另一个虚拟进程提供服务而等待虚拟CPU的百分比
%idle:显示CPU空闲时间占用CPU总时间的百分比
如果要查看二进制文件test中的内容,需键入如下sar命令:
sar -u -f test
命令执行结果如下图所示:
[[email protected] ~]# sar -u -f test
Linux 2.6.32-431.el6.x86_64 (localhost.localdomain) 2017年06月16日 _x86_64_ (2 CPU)
14时49分20秒 CPU %user %nice %system %iowait %steal %idle
14时49分25秒 all 0.00 0.00 0.20 0.00 0.00 99.80
14时49分30秒 all 0.00 0.00 0.50 0.00 0.00 99.50
14时49分35秒 all 0.00 0.00 0.20 0.00 0.00 99.80
平均时间: all 0.00 0.00 0.30 0.00 0.00 99.70
2、inode、文件和其他内核表监控
例如,每5秒采样一次,连续采样3次,观察核心表的状态,需键入如下命令
命令执行后显示如下:
[[email protected] ~]# sar -v 5 3
Linux 2.6.32-431.el6.x86_64 (localhost.localdomain) 2017年06月16日 _x86_64_ (2 CPU)
15时01分28秒 dentunusd file-nr inode-nr pty-nr
15时01分33秒 4994 832 11865 2
15时01分38秒 4994 832 11865 2
15时01分43秒 4994 832 11865 2
平均时间: 4994 832 11865 2
输出项说明:
dentunusd:目录高速缓存中未被使用的条目数量
file-nr:文件句柄的使用数量
inode-nr:索引节点句柄的使用数量
pty-nr:使用的pty数量
3、内存和交换空间监控
例如:每5秒采样一次,连续采样3次,监控内存分页:
sar 5 3
命令执行结果显示如下:
[[email protected] ~]# sar -r 5 3
Linux 2.6.32-431.el6.x86_64 (localhost.localdomain) 2017年06月16日 _x86_64_ (2 CPU)
15时07分32秒 kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit
15时07分37秒 851688 152724 15.21 16844 49432 117412 5.79
15时07分42秒 851688 152724 15.21 16844 49432 117412 5.79
15时07分47秒 851688 152724 15.21 16852 49432 117412 5.79
平均时间: 851688 152724 15.21 16847 49432 117412 5.79
输出项说明:
kbmemfree:这个值和free命令中的free值基本一致,所以它不包括buffer和cache的空间
kbmemused:这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间
%memused:这个值是kbmemused和内存总量的一个百分比
kbbuffers和kbcached:这两个值就是free命令中的buffer和cache
kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存
%commit:这个值是kbcommit与内存总量的一个百分比
4、内存分页监控
例如,每5秒采样一次,连续采样3次,监控内存分页:
sar -B 5 3
执行命令后显示结果如下:
[[email protected] ~]# sar -B 5 3
Linux 2.6.32-431.el6.x86_64 (localhost.localdomain) 2017年06月16日 _x86_64_ (2 CPU)
15时17分55秒 pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff
15时18分00秒 0.00 0.00 7.26 0.00 15.52 0.00 0.00 0.00 0.00
15时18分05秒 0.00 0.00 8.91 0.00 16.60 0.00 0.00 0.00 0.00
15时18分10秒 0.00 0.00 6.45 0.00 15.93 0.00 0.00 0.00 0.00
平均时间: 0.00 0.00 7.54 0.00 16.02 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)的百分比
5、I/O和传送速率监控
例如,每5秒采样一次,连续采样3次,报告缓冲区的使用情况,需键入如下命令:
sar -b 5 3
执行命令后显示结果如下:
[[email protected] ~]# sar -b 5 3
Linux 2.6.32-431.el6.x86_64 (localhost.localdomain) 2017年06月16日 _x86_64_ (2 CPU)
15时22分35秒 tps rtps wtps bread/s bwrtn/s
15时22分40秒 0.00 0.00 0.00 0.00 0.00
15时22分45秒 0.00 0.00 0.00 0.00 0.00
15时22分50秒 0.60 0.00 0.60 0.00 4.83
平均时间: 0.20 0.00 0.20 0.00 1.61
输出项说明:
tps:每秒钟物理设备的 I/O 传输总量
rtps:每秒钟从物理设备读入的数据总量
wtps:每秒钟向物理设备写入的数据总量
bread/s:每秒钟从物理设备读入的数据量,单位为 块/s
bwrtn/s:每秒钟向物理设备写入的数据量,单位为 块/s
6、进程队列长度和平均负载状态监控
例如,每5秒采样一次,连续采样3次,监控进程队列长度和平均负载状态:
sar -q 5 3
命令执行后显示结果如下:
[[email protected] ~]# sar -q 5 3
Linux 2.6.32-431.el6.x86_64 (localhost.localdomain) 2017年06月16日 _x86_64_ (2 CPU)
15时27分03秒 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15
15时27分08秒 0 182 0.00 0.00 0.00
15时27分13秒 0 182 0.00 0.00 0.00
15时27分18秒 0 182 0.00 0.00 0.00
平均时间: 0 182 0.00 0.00 0.00
输出项说明:
runq-sz:运行队列的长度(等待运行的进程数)
plist-sz:进程列表中进程(processes)和线程(threads)的数量
ldavg-1:最后1分钟的系统平均负载(System load average)
ldavg-5:过去5分钟的系统平均负载
ldavg-15:过去15分钟的系统平均负载
7、系统交换活动信息监控
例如,每5秒采样一次,连续采样3次,监控系统交换活动信息:
sar - W 5 3
命令执行后显示结果如下:
[[email protected] ~]# sar -W 5 3
Linux 2.6.32-431.el6.x86_64 (localhost.localdomain) 2017年06月16日 _x86_64_ (2 CPU)
15时30分38秒 pswpin/s pswpout/s
15时30分43秒 0.00 0.00
15时30分48秒 0.00 0.00
15时30分53秒 0.00 0.00
平均时间: 0.00 0.00
输出项说明:
pswpin/s:每秒系统换入的交换页面(swap page)数量
pswpout/s:每秒系统换出的交换页面(swap page)数量
8、设备使用情况监控
例如,每5秒采样一次,连续采样3次,报告设备使用情况,需键入如下命令:
sar -d 5 3 –p
命令执行后显示结果如下:
[[email protected] ~]# sar -d 5 3 -p
Linux 2.6.32-431.el6.x86_64 (localhost.localdomain) 2017年06月16日 _x86_64_ (2 CPU)
15时33分00秒 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
15时33分05秒 sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
15时33分05秒 sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
15时33分05秒 sdc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
15时33分05秒 sdd 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
15时33分05秒 sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
15时33分05秒 md0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
15时33分05秒 LVM1-web1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
15时33分05秒 LVM1-web2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
其中:
参数-p可以打印出sda,hdc等磁盘设备名称,如果不用参数-p,设备节点则有可能是dev8-0,dev22-0
tps:每秒从物理磁盘I/O的次数.多个逻辑请求会被合并为一个I/O磁盘请求,一次传输的大小是不确定的.
rd_sec/s:每秒读扇区的次数.
wr_sec/s:每秒写扇区的次数.
avgrq-sz:平均每次设备I/O操作的数据大小(扇区).
avgqu-sz:磁盘请求队列的平均长度.
await:从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒=1000毫秒).
svctm:系统处理每次请求的平均时间,不包括在请求队列中消耗的时间.
%util:I/O请求占CPU的百分比,比率越大,说明越饱和.
1. avgqu-sz 的值较低时,设备的利用率较高。
2. 当%util的值接近 1% 时,表示设备带宽已经占满。