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

sar [options] [-A] [-o file] t [n]
其中:
t为采样间隔,n为采样次数,默认值是1;
-o file表示将命令结果以二进制格式存放在文件中,file 是文件名。

[root@node01 ~]# sar --help
Usage: sar [ options ] [ [ ] ]
Options are:
[ -A ] [ -B ] [ -b ] [ -C ] [ -d ] [ -H ] [ -h ] [ -p ] [ -q ] [ -R ]
[ -r ] [ -S ] [ -t ] [ -u [ ALL ] ] [ -V ] [ -v ] [ -W ] [ -w ] [ -y ]
[ -I { [,...] | SUM | ALL | XALL } ] [ -P { [,...] | ALL } ]
[ -m { [,...] | ALL } ] [ -n { [,...] | ALL } ]
[ -j { ID | LABEL | PATH | UUID | ... } ]
[ -f [ ] | -o [ ] | -[0-9]+ ]
[ -i ] [ -s [ ] ] [ -e [ ] ]

-A:所有报告的总和
-u:输出CPU使用情况的统计信息
-v:输出inode、文件和其他内核表的统计信息
-d:输出每一个块设备的活动信息
-r:输出内存和交换空间的统计信息
-b:显示I/O和传送速率的统计信息
-a:文件读写情况
-c:输出进程统计信息,每秒创建的进程数
-R:输出内存页面的统计信息
-y:终端设备活动情况
-w:输出系统交换活动信息

CPU分析:
sar
sar -u u或者不加参数,会输出今天到目前为止的CPU情况,并算出平均值,间隔10分钟。
sar 1 10 持续输出,每1秒统计一次,持续10s,并算出平均值
sar -P ALL 单核输出:全部CPU
sar -P 0 单核输出:CPU0
sar -o cpu.log 1 10 同时保存为二进制文件
sar -f cpu.log 打开保存的二进制文件

[root@node01 ~]# sar 1 3
Linux 4.10.10-1.el7.elrepo.x86_64 (node01) 06/13/2017 _x86_64_ (8 CPU)

03:35:30 PM CPU %user %nice %system %iowait %steal %idle
03:35:31 PM all 0.00 0.00 0.12 0.00 0.00 99.88
03:35:32 PM all 0.00 0.00 0.00 0.00 0.00 100.00
03:35:33 PM all 0.00 0.00 0.00 0.00 0.00 100.00
Average: all 0.00 0.00 0.04 0.00 0.00 99.96

输出项说明:
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 的值持续低于1,则系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU
4. 若 %steal值偏高,说明被偷走的时间较多,可能是IDC其他服务器共享CPU多。

负载分析:

sar -q 会输出今天到目前为止的负载情况,并算出平均值,间隔10分钟。

[root@SqlRun opt]# sar -q 1 3
Linux 3.10.0-123.9.3.el7.x86_64 (SqlRun) 06/13/2017 _x86_64_ (2 CPU)

03:39:41 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
03:39:42 PM 1 838 0.81 0.72 0.64 0
03:39:43 PM 3 839 0.81 0.72 0.64 0
03:39:44 PM 2 821 0.81 0.72 0.64 0
Average: 2 833 0.81 0.72 0.64 0

#runq-sz 运行队列的长度(等待运行的进程数,每核不能超过3个)
#plist-sz 进程列表中的进程(processes)和线程数(threads)的数量
#ldavg-1 (System load average)最后1分钟的CPU平均负载,即将多核CPU过去一分钟的负载相加再除以核心数得出的平均值,5分钟和15分钟以此类推
#ldavg-5 最后5分钟的CPU平均负载
#ldavg-15 最后15分钟的CPU平均负载

内存分析:
sar -r 会输出今天到目前为止的内存情况,并算出平均值,间隔10分钟。
sar -B 分页情况
[root@node01 ~]# sar -r 1 3
Linux 4.10.10-1.el7.elrepo.x86_64 (node01) 06/13/2017 _x86_64_ (8 CPU)

03:45:55 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
03:45:56 PM 2820828 1206568 29.96 1084 458400 3256012 53.16 632680 312820 0
03:45:57 PM 2820828 1206568 29.96 1084 458400 3256012 53.16 632680 312820 0
03:45:58 PM 2820828 1206568 29.96 1084 458400 3256012 53.16 632680 312820 0
Average: 2820828 1206568 29.96 1084 458400 3256012 53.16 632680 312820 0

#kbmemfree 空闲的物理内存大小
#kbmemused 使用中的物理内存大小
#%memused 物理内存使用率
#kbbuffers 内核中作为缓冲区使用的物理内存大小,kbbuffers和kbcached:这两个值就是free命令中的buffer和cache.
#kbcached 缓存的文件大小
#kbcommit 保证当前系统正常运行所需要的最小内存,即为了确保内存不溢出而需要的最少内存(物理内存+Swap分区)
#commit 这个值是kbcommit与内存总量(物理内存+swap分区)的一个百分比的值

[root@node01 ~]# sar -B 1 3
Linux 4.10.10-1.el7.elrepo.x86_64 (node01) 06/13/2017 _x86_64_ (8 CPU)

03:55:45 PM pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff
03:55:46 PM 0.00 0.00 21.00 0.00 38.00 0.00 0.00 0.00 0.00
03:55:47 PM 0.00 0.00 19.00 0.00 39.00 0.00 0.00 0.00 0.00
03:55:48 PM 0.00 0.00 21.00 0.00 42.00 0.00 0.00 0.00 0.00
Average: 0.00 0.00 20.33 0.00 39.67 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)的百分比

[root@node01 ~]# sar -W 1 3
Linux 4.10.10-1.el7.elrepo.x86_64 (node01) 06/13/2017 _x86_64_ (8 CPU)

04:33:09 PM pswpin/s pswpout/s
04:33:10 PM 0.00 0.00
04:33:11 PM 0.00 0.00
04:33:12 PM 0.00 0.00
Average: 0.00 0.00

pswpin/s:每秒系统换入的交换页面(swap page)数量
pswpout/s:每秒系统换出的交换页面(swap page)数量

文件系统分析:
[root@node01 ~]# sar -v 1 3
Linux 4.10.10-1.el7.elrepo.x86_64 (node01) 06/13/2017 _x86_64_ (8 CPU)

04:29:18 PM dentunusd file-nr inode-nr pty-nr
04:29:19 PM 59013 6272 39428 2
04:29:20 PM 59013 6272 39428 2
04:29:21 PM 59013 6272 39428 2
Average: 59013 6272 39428 2

dentunusd:目录高速缓存中未被使用的条目数量
file-nr:文件句柄(file handle)的使用数量
inode-nr:索引节点句柄(inode handle)的使用数量
pty-nr:使用的pty数量
[root@node01 ~]# sar -b 1 3
Linux 4.10.10-1.el7.elrepo.x86_64 (node01) 06/13/2017 _x86_64_ (8 CPU)

04:31:22 PM tps rtps wtps bread/s bwrtn/s
04:31:23 PM 0.00 0.00 0.00 0.00 0.00
04:31:24 PM 0.00 0.00 0.00 0.00 0.00
04:31:25 PM 0.00 0.00 0.00 0.00 0.00
Average: 0.00 0.00 0.00 0.00 0.00

tps:每秒钟物理设备的 I/O 传输总量
rtps:每秒钟从物理设备读入的数据总量
wtps:每秒钟向物理设备写入的数据总量
bread/s:每秒钟从物理设备读入的数据量,单位为 块/s
bwrtn/s:每秒钟向物理设备写入的数据量,单位为 块/s

[root@node01 ~]# sar -d 1 2 -p
Linux 4.10.10-1.el7.elrepo.x86_64 (node01) 06/13/2017 _x86_64_ (8 CPU)

04:34:51 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
04:34:52 PM sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:34:52 PM sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:34:52 PM centos-root 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:34:52 PM centos-swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

04:34:52 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
04:34:53 PM sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:34:53 PM sda 16.83 0.00 200.00 11.88 0.02 1.24 0.18 0.30
04:34:53 PM centos-root 21.78 0.00 200.00 9.18 0.03 1.23 0.14 0.30
04:34:53 PM centos-swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
Average: sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: sda 8.46 0.00 100.50 11.88 0.01 1.24 0.18 0.15
Average: centos-root 10.95 0.00 100.50 9.18 0.01 1.23 0.14 0.15
Average: centos-swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

[root@node01 ~]# sar -d 1 2
Linux 4.10.10-1.el7.elrepo.x86_64 (node01) 06/13/2017 _x86_64_ (8 CPU)

04:34:10 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
04:34:11 PM dev8-16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:34:11 PM dev8-0 145.00 1752.00 0.00 12.08 0.71 4.94 4.77 69.10
04:34:11 PM dev253-0 145.00 1744.00 0.00 12.03 0.73 5.07 4.77 69.10
04:34:11 PM dev253-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

04:34:11 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
04:34:12 PM dev8-16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04:34:12 PM dev8-0 97.00 824.00 8.00 8.58 0.45 4.64 4.64 45.00
04:34:12 PM dev253-0 97.00 824.00 8.00 8.58 0.45 4.64 4.64 45.00
04:34:12 PM dev253-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
Average: dev8-16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: dev8-0 121.00 1288.00 4.00 10.68 0.58 4.82 4.71 57.05
Average: dev253-0 121.00 1284.00 4.00 10.64 0.59 4.90 4.71 57.05
Average: dev253-1 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的值接近 100% 时,表示设备带宽已经占满。

3 对 “SAR命令”的想法;

  1. //查看指定文件1/5/15分钟平均负载记录
    #sar -q -f /var/log/sa/sa03

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

Captcha Code