性能调优工具

  • CPU

vmstat (每秒采样一次采5次: vmstat 1 5)查看CPU上下文切换。如下:

[root]# vmstat 1 5 | awk '{print strftime("[%Y-%m-%d %H:%M:%S]"),$0}'
[2019-05-23 16:50:20] procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
[2019-05-23 16:50:20]  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
[2019-05-23 16:50:20]  1  0      0 65288416 595296 59468464    0    0     1    11    0    1  1  1 98  0  0
[2019-05-23 16:50:21]  1  0      0 65285952 595296 59468740    0    0     0     0 7454 10210  0  1 99  0  0
[2019-05-23 16:50:22]  3  0      0 65287908 595296 59468460    0    0     0     0 7821 11081  0  1 99  0  0
[2019-05-23 16:50:23]  1  0      0 65286964 595296 59468536    0    0     0     0 7409 10187  0  1 99  0  0
[2019-05-23 16:50:24]  4  0      0 65288988 595296 59468524    0    0     0     4 7708 10717  0  1 99  0  0

主要关注以下指标:

  • us:用户占用CPU的百分比
  • sy:系统(内核和中断)占用CPU的百分比
  • id:CPU空闲的百分比
  • in:系统中断数
  • cs:每秒上下文切换次数
  • r:可运行进程数,包括正在运行(Running)和已就绪等待运行(Waiting)的。在负载测试中,其可接受上限通常不超过CPU核数的2倍。

CPU使用率通常用us + sy来计算,一般大于80%说明,CPU资源出现瓶颈。同时也要综合参考CPU平均负载Load Average信息。Linux系统中,一般取运行队列的值 + 处于task_uninterruptible状态的进程数(vmstat输出的b)。可以通过top命令查看1分钟、5分钟和15分钟的平均负载值。一般来说平均负载的15min采样大于核数*0.7 就要关注和排查一下高负载的原因。

      

top - 16:56:04 up 16 days,  1:46,  0 users,  load average: 0.10, 0.14, 0.40
Tasks:   7 total,   1 running,   6 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.4 us,  0.8 sy,  0.0 ni, 98.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st, 98.4 id_exact,  0.1 hi_exact,  0.1 irq_exact
KiB Mem : 13141616+total, 65280144 free,  6071468 used, 60064544 buff/cache
KiB Swap: 16777212 total, 16777212 free,        0 used. 12392304+avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
   111 root      20   0 22.283g 625600  19168 S   1.0  0.5   4:16.83 java
     1 root      20   0   11768   1620   1252 S   0.0  0.0   0:00.01 start.sh
   112 root      20   0   84632   3624   2744 S   0.0  0.0   0:00.24 sshd
  1165 root      20   0   11768   1916   1464 S   0.0  0.0   0:00.01 bash
  1183 root      20   0   83900   2096   1516 S   0.0  0.0   0:00.00 su
  1184 root      20   0   11764   1836   1480 S   0.0  0.0   0:00.03 bash
  1451 root      20   0   51880   1928   1412 R   0.0  0.0   0:00.01 top
  • load average: 0.10, 0.14, 0.40    分别是1分钟,5分钟,15分钟采样数据

 

top -Hp [pid]   查看进程中线程占用资源情况

 

  • 内存

vmstat同样可以反映内存情况:

  • free: 系统可用内存,对于稳定运行的系统,free可接受的范围通常应该大于物理内存的20%。
  • so/si : 每秒从内存写入到SWAP的数据大小/每秒从SWAP读取到内存的数据大小。如果出现频繁的swap交换,会影响系统性能,需要一起注意。
  • swpd:系统当前的swap空间占用。可以和so/si 综合分析。如果swpd为0 ,内存资源没有成为瓶颈

 

  • 磁盘读写IO

使用iostat 

# iostat -dxk 2
Linux 3.10.0-514.6.1.el7.x86_64 (localhost92.localdomain)       05/23/2019      _x86_64_        (16 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
sda               0.79     3.15    3.87   16.33    81.57   182.10    26.11     0.43   21.35   30.69   19.13   5.44  10.98
dm-0              0.00     0.00    3.15   14.42    55.47   119.19    19.88     0.29   16.48   26.43   14.31   4.91   8.63
dm-1              0.00     0.00    1.26    1.95     5.04     7.78     8.00     0.55  172.21   50.24  251.22   1.14   0.37
dm-2              0.00     0.00    0.31    3.43    21.03    55.13    40.79     0.15   41.03   61.93   39.16   7.97   2.98

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     4.00    1.50   22.00    12.00   226.50    20.30     0.26   11.11    0.67   11.82   6.02  14.15
dm-0              0.00     0.00    0.00   23.00     0.00   202.50    17.61     0.28   12.28    0.00   12.28   4.98  11.45
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-2              0.00     0.00    1.50    3.00    12.00    24.00    16.00     0.03    7.33    0.67   10.67   6.22   2.80
  • -d  显示设备(磁盘)使用状态
  • -x       显示和io相关的扩展数据
  • -k       某些使用block为单位的列强制使用Kilobytes为单位
  • 2   每2秒采集一次
rrqm/s:   每秒进行 merge 的读操作数目。即 delta(rmerge)/s
wrqm/s:   每秒进行 merge 的写操作数目。即 delta(wmerge)/s
r/s:      每秒完成的读 I/O 设备次数。即 delta(rio)/s
w/s:      每秒完成的写 I/O 设备次数。即 delta(wio)/s
rsec/s:   每秒读扇区数。即 delta(rsect)/s
wsec/s:   每秒写扇区数。即 delta(wsect)/s
rkB/s:    每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。(需要计算)
wkB/s:    每秒写K字节数。是 wsect/s 的一半。(需要计算)
avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio)
avgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。
await:    平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
svctm:    平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)
%util:    一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)
          如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。
%idle:    idle小于70% IO压力就较大了,一般读取速度有较多的wait.同时可以结合vmstat 查看查看b参数和wa参数

一般用法:

iostat -d -k 1 10        #查看TPS和吞吐量信息(磁盘读写速度单位为KB)
iostat -d -m 2            #查看TPS和吞吐量信息(磁盘读写速度单位为MB)
iostat -d -x -k 1 10    #查看设备使用率(%util)、响应时间(await) 
iostat -c 1 10            #查看cpu状态

 

posted @ 2019-05-23 17:28  killerqi  阅读(477)  评论(0)    收藏  举报