sar命令详解

sar 是非常强大性能分析命令,通过 sar 命令可以全面的获取系统的 CPU、运行队列、磁盘 I/O、交换区、内存、 cpu 中断、网络等性能数据。
sar 命令行的常用格式:
sar [options] [-A] [-o file] t [n]
在命令行中, n 和 t 两个参数组合起来定义采样间隔和次数, t 为采样间隔, 是必须有的参数, n 为采样次数,是可选的,默认值是 1, -o file 表示将命令结果以二进制格式存放在文件中, file 在此处不是关键字,是文件名。 options 为命令行选项, sar 命令的选项很多,下面只列出常用选项:
     -A:所有报告的总和。
     -u: CPU 利用率
     -v:进程、节点、文件和锁表状态。
  -p:像是当前系统中指定 CPU 使用信息。
    -d:硬盘使用报告。
    -r:显示系统内存的使用情况。
  -n: 显示网络运行状态。 参数后面可跟 DEV、 EDEV、 SOCK 和 FULL。 DEV 显示网络接口信息, EDEV 显示网络错误的统计数据, SOCK 显示套接字信息, FULL 显示前三参数所以信息。


  -q:显示运行队列的大小,它与系统当时的平均负载相同
  -B:内存分页情况
  -R:显示进程在采样时间内的活动情况。
    -g:串口 I/O 的情况。
    -b:缓冲区使用情况。
    -a:文件读写情况。
    -c:系统调用情况。
    -R:进程的活动情况。
    -y:终端设备活动情况。
    -W:系统交换活动。

sar——监控 CPU

复制代码
[sdk_test@ssdk1 server]$ sar -u 3 5
Linux 2.6.32-431.11.15.el6.ucloud.x86_64 (ssdk1)     10/28/2016     _x86_64_    (4 CPU)

03:42:32 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
03:42:35 PM     all      1.08      0.00      0.58      0.00      0.00     98.33
03:42:38 PM     all      0.75      0.00      0.50      0.00      0.00     98.75
03:42:41 PM     all      1.25      0.00      0.58      0.00      0.00     98.17
03:42:44 PM     all      0.75      0.00      0.33      0.00      0.00     98.91
03:42:47 PM     all      1.50      0.00      0.75      0.00      0.00     97.75
Average:        all      1.07      0.00      0.55      0.00      0.00     98.38
复制代码

%usr:用户进程消耗的 CPU 时间百分比。
 %nice: 运行正常进程消耗的 CPU 时间百分比。
 %system:系统进程消耗的 CPU 时间百分比。
 %iowait: I/O 等待所占 CPU 时间百分比。
 %steal:在内存紧张环境下, pagein 强制对不同的页面进行的 steal 操作。
 %idle: CPU 空闲状态的时间百分比。
在所有的显示中,我们应主要注意%iow 和%idle, %iow 的值过高,表示硬盘存在 I/O 瓶颈, %idle 值高,表示 CPU 较空闲,如果%idle 值高但系统响应慢时,有可能是 CPU 等待分配内存, 此时应加大内存容量。 %idle 值如果持续低于 10,那么系统的 CPU 处理能力相对较低,表 明系统中最需要解决的资源是 CPU。

sar——内存和交换空间监控

复制代码
[sdk_test@ssdk1 server]$ sar -r 5 3
Linux 2.6.32-431.11.15.el6.ucloud.x86_64 (ssdk1)     10/28/2016     _x86_64_    (4 CPU)

03:50:06 PM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit
03:50:11 PM    155580  16115280     99.04    252504  12431540   3873512     23.06
03:50:16 PM    154860  16116000     99.05    252504  12431764   3873512     23.06
03:50:21 PM    155116  16115744     99.05    252504  12432000   3873512     23.06
Average:       155185  16115675     99.05    252504  12431768   3873512     23.06
复制代码
[sdk_test@ssdk1 server]$ free
             total       used       free     shared    buffers     cached
Mem:      16270860   16113196     157664        464     252644   12430100
-/+ buffers/cache:    3430452   12840408 
Swap:       524280          0     524280 

 Kbmemfree: 这个值和 free 命令中的 free 值基本一致,所以它不包括 buffer 和 cache 的空间。
 kbmemused:这个值和 free 命令中的 used 值基本一致,所以它包括 buffer 和 cache 的空间。
 %memused:这个值是 kbmemused 和内存总量(不包括 swap)的一个百分比。
 kbbuffers 和 kbcached:这两个值就是 free 命令中的 buffer 和 cache。
 kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap)。
 %commit:这个值是 kbcommit 与内存总量(包括 swap)的一个百分比。

sar——内存分页监控

复制代码
[sdk_test@ssdk1 server]$ sar -B 5 3
Linux 2.6.32-431.11.15.el6.ucloud.x86_64 (ssdk1)     10/28/2016     _x86_64_    (4 CPU)

03:49:40 PM  pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s pgscank/s pgscand/s pgsteal/s    %vmeff
03:49:45 PM      0.00     18.47      9.64      0.00    101.20      0.00      0.00      0.00      0.00
03:49:50 PM      0.00     14.46    362.05      0.00    149.80      0.00      0.00      0.00      0.00
03:49:55 PM      0.00    136.82   1683.70      0.00    552.31      0.00      0.00      0.00      0.00
Average:         0.00     56.53    684.46      0.00    267.58      0.00      0.00      0.00      0.00
复制代码

 pgpgin/s:表示每秒从磁盘或 SWAP 置换到内存的字节数(KB)。
 pgpgout/s:表示每秒从内存置换到磁盘或 SWAP 的字节数(KB)。
 fault/s:每秒钟系统产生的缺页数,即主缺页与次缺页之和(major + minor)。
 majflt/s:每秒钟产生的主缺页数。

sar——I/O 和传送速率监控

复制代码
[sdk_test@ssdk1 server]$ sar -b 5 3
Linux 2.6.32-431.11.15.el6.ucloud.x86_64 (ssdk1)     10/28/2016     _x86_64_    (4 CPU)

03:49:18 PM       tps      rtps      wtps   bread/s   bwrtn/s
03:49:23 PM      0.80      0.00      0.80      0.00     16.00
03:49:28 PM      3.62      0.00      3.62      0.00    291.35
03:49:33 PM      2.40      0.00      2.40      0.00    189.18
Average:         2.27      0.00      2.27      0.00    165.24
复制代码

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

sar——进程队列长度和平均负载状态监控

复制代码
[sdk_test@ssdk1 server]$ sar -q 5 3
Linux 2.6.32-431.11.15.el6.ucloud.x86_64 (ssdk1)     10/28/2016     _x86_64_    (4 CPU)

03:48:56 PM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15
03:49:01 PM         0       535      0.02      0.02      0.00
03:49:06 PM         0       536      0.01      0.02      0.00
03:49:11 PM         0       536      0.01      0.02      0.00
Average:            0       536      0.01      0.02      0.00
复制代码

 runq-sz:运行队列的长度(等待运行的进程数)。
 plist-sz:进程列表中进程(processes)和线程(threads)的数量。
 ldavg-1:最后 1 分钟的系统平均负载(System load average)。
 ldavg-5:过去 5 分钟的系统平均负载。
 ldavg-15:过去 15 分钟的系统平均负载。

sar——系统交换活动信息监控

复制代码
[sdk_test@ssdk1 server]$ sar -W 3 5
Linux 2.6.32-431.11.15.el6.ucloud.x86_64 (ssdk1)     10/28/2016     _x86_64_    (4 CPU)

03:45:41 PM  pswpin/s pswpout/s
03:45:44 PM      0.00      0.00
03:45:47 PM      0.00      0.00
03:45:50 PM      0.00      0.00
03:45:53 PM      0.00      0.00
03:45:56 PM      0.00      0.00
Average:         0.00      0.00
复制代码

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

sar——设备使用情况监控

复制代码
[sdk_test@ssdk1 server]$ sar -d 5 3
Linux 2.6.32-431.11.15.el6.ucloud.x86_64 (ssdk1)     10/28/2016     _x86_64_    (4 CPU)

04:16:22 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
04:16:27 PM  dev252-0      0.40      0.00      6.41     16.00      0.00      0.00      0.00      0.00
04:16:27 PM dev252-16      0.80      0.00    155.51    194.00      0.00      1.00      1.00      0.08

04:16:27 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
04:16:32 PM  dev252-0      1.80      0.00     16.03      8.89      0.00      0.00      0.00      0.00
04:16:32 PM dev252-16      1.20      0.00    142.69    118.67      0.00      1.50      0.83      0.10

04:16:32 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
04:16:37 PM  dev252-0      1.20      0.00     20.80     17.33      0.00      0.00      0.00      0.00
04:16:37 PM dev252-16      1.00      0.00     68.80     68.80      0.00      1.40      1.00      0.10

Average:          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
Average:     dev252-0      1.13      0.00     14.42     12.71      0.00      0.00      0.00      0.00
Average:    dev252-16      1.00      0.00    122.30    122.13      0.00      1.33      0.93      0.09
复制代码

 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% 时,表示设备带宽已经占满。

总结

 要判断系统瓶颈问题,有时需几个 sar 命令选项结合起来
 怀疑 CPU 存在瓶颈,可用 sar -u 和 sar -q 等来查看
 怀疑内存存在瓶颈,可用 sar -B、 sar -r 和 sar -W 等来查看
 怀疑 I/O 存在瓶颈,可用 sar -b、 sar -u 和 sar -d 等来查看

posted @ 2017-12-15 11:14  北方客888  阅读(765)  评论(0编辑  收藏  举报