sar主要用于收集并统计系统资源的信息,包括CPU、IO、内存、网卡流量等。

vmstat命令主要是对操作系统的虚拟内存、进程、IO读写、CPU活动等整体情况进行统计。但是它不能对某个进程进行深入分析。

 iostat用于输出CPU和磁盘I/O相关的统计信息 

 top命令动态展示系统整体资源和各个进程资源占用状况,是Linux下常用的性能分析工具。 

sar语法

用法:sar [ 选项 ] [ <时间间隔> [ <次数> ] ]

常用选项说明:

-u 输出整体CPU的使用情况,默认值。 
-d 显示各个磁盘的统计信息
-p 以sdX的形式显示设备名称,不带该参数,设备显示是dev2-8、dev2-9等,不易识别。
-b 显示磁盘I/O的使用情况:
-r 显示内存统计信息
-P ALL 显示每个内核统计信息:
-n 显示网络使用情况,-n后接关键词”DEV”可显示eth0、eth1等网卡的信息:
-o sar输出信息保存到指定的文件
常用实例

1、cpu整体使用情况统计(sar 2 3 /sar -u 2 3)

Linux性能测试分析命令_sar+iostat+vmstat+top_时间间隔
$ sar 2 3
Linux 3.10.0-514.26.2.el7.x86_64 (VM_17_110_centos)     2017年10月22日  _x86_64_        (4 CPU)

10时43分18秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
10时43分20秒     all      0.63      0.00      0.38      0.00      0.00     99.00
平均时间:     all      0.75      0.00      0.42      0.29      0.00     98.54
输出说明:
%user: 用户态下CPU使用时间比率
%system: 内核态下CPU使用时间比率
%iowait: CPU等待I/O占用时间比率
%idle: CPU空闲时间比率

2、各磁盘IO使用情况统计(sar -d -p 1 2)。

$ sar -d -p 1 2
Linux 3.10.0-514.26.2.el7.x86_64 (VM_17_110_centos)     2017年10月22日  _x86_64_        (4 CPU)

10时45分52秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
10时45分53秒       vda      2.00      0.00     24.00     12.00      0.03     13.00      6.50      1.30
10时45分53秒       vdb      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
10时45分53秒       vdc      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00


平均时间:       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
平均时间:       vda      1.00      0.00     12.00     12.00      0.01     13.00      6.50      0.65

输出说明:

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的百分比,比率越大,说明越饱和.

3、内存使用情况统计(sar -r 1 2 )

$ sar -r 1 2
Linux 3.10.0-514.26.2.el7.x86_64 (VM_17_110_centos)     2017年10月22日  _x86_64_        (4 CPU)

10时46分51秒 kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
10时46分53秒    146952   7863576     98.17   1083660   3756212   5873504     73.32   4508752   2539468       128
平均时间:    146952   7863576     98.17   1083660   3756210   5873504     73.32   4508746   2539470       128

输出说明

kbmemfree 空闲物理内存
kbmemused 已使用物理内存
%memused 已使用内存占总内存百分比
kbbuffers Buffer Cache大小
kbcached Page Cache大小
kbcommit 应用程序当前使用内存大小
%commit 应用程序使用内存百分比

4、网卡流量使用情况统计(sar -n DEV 1 2)

$ sar -n DEV 1 2
Linux 3.10.0-514.26.2.el7.x86_64 (VM_17_110_centos)     2017年10月22日  _x86_64_        (4 CPU)

10时47分51秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
10时47分52秒      eth0     42.00     39.00     13.06     11.54      0.00      0.00      0.00
10时47分52秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00

平均时间:     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
平均时间:      eth0     29.50     29.50      8.98      9.56      0.00      0.00      0.00

输出说明
IFACE: 网络接口名称
rxpck/s: 每秒收包的数量
txpck/s: 每秒发包的数量
rxkB/s: 每秒收的数据量(kB为单位)
txkB/s: 每秒发的数据量(kB为单位)
rxcmp/s:每秒钟接收的压缩数据包
txcmp/s:每秒钟发送的压缩数据包
rxmcst/s:每秒钟接收的多播数据包

-a:显示活跃和非活跃内存

-f:显示从系统启动至今的fork数量 。

-m:显示slabinfo

-n:只在开始时显示一次各字段名称。

-s:显示内存相关统计信息及多种系统活动数量。

delay:刷新时间间隔。如果不指定,只显示一条结果。

count:刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷。

-d:显示磁盘相关统计信息。

-p:显示指定磁盘分区统计信息

-S:使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes)

-V:显示vmstat版本信息。    

 

使用实例

1、vmstat 1 2,每秒收集1次统计信息,总共收集2次。这是最常用的实例,不带选项。

$ vmstat 1 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 142524 1499664 4028148    0    0    38    42    7    9  1  1 98  0  0
 0  0      0 141764 1499664 4028160    0    0     0     0 1123 2025  1  1 99  0  0

以上各列含义

Linux性能测试分析命令_sar+iostat+vmstat+top_时间间隔
procs:
  r 表示运行和等待CPU时间片的进程数,这个值如果长期大于系统CPU个数,说明CPU不足。
  b 表示等待资源的进程数,比如正在等待I/O、或者内存交换等。
memory:
  swpd 虚拟内存使用量。即切换到内存交换区的内存数量。如果大于0,表示机器物理内存不足。
  free 空闲物理内存
  buff 作为buff使用的内存
  cache 作为cache使用的内存
swap:
  si  每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够或者内存泄露了,要查找耗内存进程解决掉。
  so  每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。
一般情况下,si、so的值都为0,如果si、so的值长期不为0,则表示内存不足。
IO: bi 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte bo 块设备每秒发送的块数量
设置的bi+bo参考值为1000,如果超过1000,而且wa值较大,则表示系统磁盘IO有问题,应该考虑提高磁盘的读写性能。 system: in 每秒CPU的中断次数,包括时间中断。 cs 每秒上下文切换次数
这两个值越大,内核消耗的CPU就越多 cpu: us 用户进程消耗的CPU时间百分比,us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,就需要考虑优化程序或算法 sy 内核进程消耗的CPU时间百分比,sy值如果太高,说明内核消耗CPU资源很多,例如是IO操作频繁。 id CPU处于空闲状态的时间百分比。 wa io等待所占用的时间百分比,wa值越高,说明IO等待越严重,根据经验,wa的参考值为20%,如果wa超过20%,说明IO等待严重,引起IO等待的
原因可能是磁盘大量随机读写造成的,也可能是磁盘或者磁盘控制器的带宽瓶颈造成的(主要是块操作)

iostat语法

用法:iostat [ 选项 ] [ <时间间隔> [ <次数> ]]

常用选项说明:

-c:只显示系统CPU统计信息,即单独输出avg-cpu结果,不包括device结果
-d:单独输出Device结果,不包括cpu结果
-k/-m:输出结果以kB/mB为单位,而不是以扇区数为单位
-x:输出更详细的io设备统计信息
interval/count:每次输出间隔时间,count表示输出次数,不带count表示循环输出

说明:更多选项使用使用man iostat查看

常用实例

1、iostat,结果为从系统开机到当前执行时刻的统计信息

$ iostat
Linux 3.10.0-514.26.2.el7.x86_64 (VM_17_110_centos)     2017年10月22日  _x86_64_        (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.49    0.00    0.65    0.29    0.00   97.58

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
vda               3.27         6.38        48.27    7044109   53255704
vdb               0.00         0.00         0.00        944          0
vdc              12.22       145.74       120.85  160792201  133326268

输出含义:

    avg-cpu: 总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值。重点关注iowait值,表示CPU用于等待io请求的完成时间。

    Device: 各磁盘设备的IO统计信息。各列含义如下:

Device: 以sdX形式显示的设备名称
tps: 每秒进程下发的IO读、写请求数量
Blk_read/s: 每秒读扇区数量(一扇区为512bytes)
Blk_wrtn/s: 每秒写扇区数量
Blk_read: 取样时间间隔内读扇区总数量
Blk_wrtn: 取样时间间隔内写扇区总数量

2、iostat -x -k -d 1 2。每隔1S输出磁盘IO的详细详细,总共采样2次。

$ iostat -x -k  1 2
Linux 3.10.0-514.26.2.el7.x86_64 (VM_17_110_centos)     2017年10月22日  _x86_64_        (4 CPU)
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda               0.00     6.85    0.67    2.60     6.38    48.27    33.39     0.02    5.72    5.46    5.78   0.27   0.09
vdb               0.00     0.00    0.00    0.00     0.00     0.00    14.75     0.00    1.55    1.55    0.00   1.55   0.00
vdc               0.06    14.87    6.91    5.31   145.72   120.84    43.62     0.11    9.04    9.92    7.89   0.89   1.09

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.50    0.00    0.25    0.00    0.00   99.25

以上各列的含义如下:

Linux性能测试分析命令_sar+iostat+vmstat+top_时间间隔
rrqm/s: 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
wrqm/s: 每秒对该设备的写请求被合并次数
r/s: 每秒完成的读次数
w/s: 每秒完成的写次数
rkB/s: 每秒读数据量(kB为单位)
wkB/s: 每秒写数据量(kB为单位)
avgrq-sz:平均每次IO操作的数据量(扇区数为单位)
avgqu-sz: 平均等待处理的IO请求队列长度
await: 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
svctm: 平均每次IO请求的处理时间(毫秒为单位)
%util: 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率
Linux性能测试分析命令_sar+iostat+vmstat+top_时间间隔

 重点关注参数

1、iowait% 表示CPU等待IO时间占整个CPU周期的百分比,如果iowait值超过50%,或者明显大于%system、%user以及%idle,表示IO可能存在问题。

2、avgqu-sz 表示磁盘IO队列长度,即IO等待个数。

3、await 表示每次IO请求等待时间,包括等待时间和处理时间

4、svctm 表示每次IO请求处理的时间

5、%util 表示磁盘忙碌情况,一般该值超过80%表示该磁盘可能处于繁忙状态。

 

top命令语法

  使用格式:top [-] [d] [b] [H] [p] [q] [c] [C] [S] [s] [n]

  参数说明:

Linux性能测试分析命令_sar+iostat+vmstat+top_时间间隔
d 指定每次屏幕刷新间隔时间。
p 通过进程ID查看指定进程的状态。
n 刷新次数,完成后自动退出
b 批次模式,搭配"n"参数一起使用,可以用来将top的结果重定向到文件
H 查看线程占用资源状态
u 查看指定用户进程占用资源情况 
c 显示整个命令行而不只是显示命令名
Linux性能测试分析命令_sar+iostat+vmstat+top_时间间隔
top使用实例

  查看进程ID为6663的资源占用情况,每隔2秒刷新一次,总共查看10次

top -b -p 6663 -d 2 -n 10
top -b -p 6663 -d 2 -n 10 > data.txt #重定向到文件

  查看进程ID为6663的线程资源占用情况,性能测试常用。区别就是加参数-H

top -b -H -p 6663 -d 2 -n 10
top -b -H -p 6663 -d 2 -n 10 > data.txt #重定向到文件
top默认输出关键信息解读
Linux性能测试分析命令_sar+iostat+vmstat+top_时间间隔
top - 07:09:37 up 1 day, 17:43, 14 users,  load average: 0.00, 0.03, 0.05
Tasks: 145 total,   1 running, 144 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.7 us,  0.3 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
Mem :  8010528 total,   126708 free,  1172488 used,  6711332 buff/cache
Swap:        0 total,        0 free,        0 used.  6498684 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                          
 9411 root      20   0    7076   5988    484 S   0.3  0.1   4:45.07 top                    
 9422 root      20   0   34604  13060   1196 S   0.3  0.2   6:07.28 sshd                                          
    1 root      20   0   43200   2952   1796 S   0.0  0.0   0:13.42 systemd                    
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.01 kthreadd                   
    3 root      20   0       0      0      0 S   0.0  0.0   0:00.53 ksoftirqd/0                
    5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H               
    7 root      rt   0       0      0      0 S   0.0  0.0   0:00.45 migration/0 
Linux性能测试分析命令_sar+iostat+vmstat+top_时间间隔

第1行:load average: 0.00, 0.03, 0.05。系统负载统计汇总

  load average,表示系统负载(任务队列的平均长度), 三个数值分别为1、5、15分钟前到现在的平均值。如果这个数除以逻辑CPU个数,结果高于5就表明系统在超负荷运转。

第3行:Cpu(s): 0.7 us, 0.3 sy, 0.0 ni,99.0 id, 0.0 wa, 0.0 hi, 0.0 si。CPU使用信息汇总

Linux性能测试分析命令_sar+iostat+vmstat+top_时间间隔
us 用户空间占用CPU百分比
sy 内核空间占用CPU百分比
ni 用户进程空间内改变过优先级的进程占用CPU百分比
id 空闲CPU百分比
wa I/O等待的CPU时间百分比
hi 硬件CPU中断占用百分比
si 软中断占用百分比
st 虚拟机占用百分比
Linux性能测试分析命令_sar+iostat+vmstat+top_时间间隔

第4行:Mem: 8010528 total,   126708 free,  1172488 used,  6711332 buff/cache。内存使用情况汇总。

第5行:Swap:  0 total,   0 free,  0 used.  6498684 avail Mem。交换空间使用情况汇总。

进程资源占用情况各字段含义解读

Linux性能测试分析命令_sar+iostat+vmstat+top_时间间隔
PID 进程id 
PPID 父进程id 
USER 进程所有者的用户名 
PR 优先级 
NI nice值。负值表示高优先级,正值表示低优先级
VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES 
RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA 
SHR 共享内存大小,单位kb
S 进程状态。D为不可中断的睡眠状态 R为运行 S为睡眠 T为跟踪/停止 Z为僵尸进程 
%CPU 上次更新到现在的CPU时间占用百分比 
TIME 进程使用的CPU时间总计,单位秒 
TIME+ 进程使用的CPU时间总计,单位1/100秒 
%MEM 进程使用的物理内存百分比
COMMAND 进程名称