zoukankan      html  css  js  c++  java
  • 性能调优工具

    • 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状态

  • 相关阅读:
    Hibernate关于字段的属性设计
    Hibernate之增删查改常见错误
    Hibernate之实体类设计基本步骤
    Github开源之旅第二季-MarkDown
    8.Git命令(上)
    9.Git命令(下)
    7.Git Bash操作的四个坑(基本LINUX操作)
    Webserver-HTTP项目(深入理解HTTP协议)
    JAVA入门到精通-第94讲-山寨QQ项目8-好友在线提示
    JAVA入门到精通-第93讲-山寨QQ项目7-好友在线提示
  • 原文地址:https://www.cnblogs.com/killerqi/p/10913002.html
Copyright © 2011-2022 走看看