• 生产环境服务器变慢,诊断思路和性能评估


    整机:top【uptime:系统性能命令的精简版】

    image主要查看 %CPU 、 %MEM【内存】 
    看top显示页面的右上角,load average(1分钟、5分钟、15分钟系统的平均负载值 (三值相加/3*)100% > 60% 系统负担压力大)

    查看系统命令的精简版 uptime image

    CPU: vmstat

    [root@tesm-jenkins-16-32 ~]# vmstat -n 2 3
    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  23756 2024212      0 4111256    0    0     0     1    1    1  0  0 100  0  0
     0  0  23756 2024244      0 4111364    0    0     0     0  203  225  0  0 100  0  0
     0  0  23756 2024212      0 4111364    0    0     0     4  199  214  0  0 100  0  0
    
    

    一般vmstat工具的使用是通过两个参数完成的, 
    第一个参数是采样的时间间隔数,单位是秒。 
    第二个参数是采样的次数

    1. procs
      • r: 运行和等待CPU时间片的进程数,原则上1核的CPU的运行队列不要超过2,整个系统的运行队列不能超过总核数的2倍,否则代表系统压力过大。
      • b: 等待资源的进程数,比如正在等待磁盘I/O、网络I/O等
    2. cpu
      • us: 用户进程消耗CPU时间百分比,us值高,用户进程消耗CPU时间多,如果长期大于50%,优化程序。
      • sy: 内核进程消耗的CPU时间百分比
      • 如果us+sy参考值为80%,说明可能存在CPU不足
      • id: 处于空闲的CPU百分比
      • wa:系统等待IO的CPU时间百分比
      • st: 来自于一个虚拟机偷取的CPU时间的百分比

    额外的命令:【了解】 
    查看所有CPU核信息(每隔2秒): mpstat -P ALL 2

    [root@tesm-jenkins-16-32 ~]# mpstat -P ALL 2
    Linux 3.10.0-693.21.1.el7.x86_64 (tesm-jenkins-16-32)   06/13/2019      _x86_64_        (8 CPU)
    
    03:21:27 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
    03:21:29 PM  all    0.06    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.94
    03:21:29 PM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    03:21:29 PM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    03:21:29 PM    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    03:21:29 PM    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    03:21:29 PM    4    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    03:21:29 PM    5    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    03:21:29 PM    6    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    03:21:29 PM    7    0.50    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.50
    
    03:21:29 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
    03:21:31 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    03:21:31 PM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    03:21:31 PM    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    03:21:31 PM    2    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    03:21:31 PM    3    0.50    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.50
    03:21:31 PM    4    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    03:21:31 PM    5    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    03:21:31 PM    6    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    03:21:31 PM    7    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    
    

    每个进程使用CPU核信息(每个1秒): pidstat -u 1 -p 进程号

    [root@tesm-jenkins-16-32 ~]# ps -ef | grep java
    jenkins   1214     1  0 May05 ?        01:04:00 /etc/alternatives/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/opt/jenkins -jar /opt/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon --httpPort=8080 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20
    root      3250  2304  0 15:22 pts/0    00:00:00 grep --color=auto java
    [root@tesm-jenkins-16-32 ~]# pidstat -u 1 -p 1214
    Linux 3.10.0-693.21.1.el7.x86_64 (tesm-jenkins-16-32)   06/13/2019      _x86_64_        (8 CPU)
    
    03:22:52 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
    03:22:53 PM   997      1214    0.00    0.00    0.00    0.00     0  java
    03:22:54 PM   997      1214    0.00    0.00    0.00    0.00     0  java
    03:22:55 PM   997      1214    0.00    1.00    0.00    1.00     0  java
    03:22:56 PM   997      1214    0.00    0.00    0.00    0.00     0  java
    03:22:57 PM   997      1214    0.00    0.00    0.00    0.00     0  java
    03:22:58 PM   997      1214    0.00    0.00    0.00    0.00     0  java
    
    

    内存: free

    free -m image

    每个进程使用内存信息(每个1秒): pidstat -r 1 -p 进程号

    [root@tesm-jenkins-16-32 ~]# pidstat -r 1 -p 1214
    Linux 3.10.0-693.21.1.el7.x86_64 (tesm-jenkins-16-32)   06/13/2019      _x86_64_        (8 CPU)
    
    03:29:53 PM   UID       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
    03:29:54 PM   997      1214      0.00      0.00 8033372 1636384  20.02  java
    03:29:55 PM   997      1214      0.00      0.00 8033372 1636384  20.02  java
    03:29:56 PM   997      1214      0.00      0.00 8033372 1636384  20.02  java
    03:29:57 PM   997      1214      0.00      0.00 8033372 1636384  20.02  java
    
    
    • 应用程序可用内存/系统物理内存>70% 内存充足
    • 应用程序可用内存/系统物理内存<20% 内存不足,需要增加内存
    • 20%<应用程序可用内存/系统物理内存<70% 内存基本够用

    硬盘: df 查看字盘剩余空间

    df -h

    [root@tesm-jenkins-16-32 ~]# df -h
    Filesystem               Size  Used Avail Use% Mounted on
    /dev/mapper/centos-root   48G   24G   25G  50% /
    devtmpfs                 3.9G     0  3.9G   0% /dev
    tmpfs                    3.9G     0  3.9G   0% /dev/shm
    tmpfs                    3.9G   57M  3.9G   2% /run
    tmpfs                    3.9G     0  3.9G   0% /sys/fs/cgroup
    /dev/sda1               1014M  210M  805M  21% /boot
    /dev/mapper/centos-home   24G  8.4G   15G  36% /home
    tmpfs                    799M     0  799M   0% /run/user/0
    
    

    磁盘IO: iostat

    iostat -xdk 2 3

    [root@tesm-jenkins-16-32 ~]# iostat -xdk 2 3
    Linux 3.10.0-693.21.1.el7.x86_64 (tesm-jenkins-16-32)   06/13/2019      _x86_64_        (8 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.00     0.02    0.05    0.32     1.03     9.55    57.10     0.00    7.22    5.69    7.48   0.54   0.02
    dm-0              0.00     0.00    0.05    0.33     1.01     9.54    54.79     0.00    9.12    5.58    9.67   0.48   0.02
    dm-1              0.00     0.00    0.00    0.00     0.00     0.01     8.39     0.00   51.80  178.42   13.19   5.43   0.00
    dm-2              0.00     0.00    0.00    0.00     0.02     0.00    19.97     0.00    1.22    1.77    0.15   1.20   0.00
    
    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     0.00    0.50    0.00     4.00     0.00    16.00     0.01   24.00   24.00    0.00  24.00   1.20
    dm-0              0.00     0.00    0.50    0.00     4.00     0.00    16.00     0.01   24.00   24.00    0.00  24.00   1.20
    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    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
    
    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     0.00    0.00    1.00     0.00     4.00     8.00     0.00    0.00    0.00    0.00   0.00   0.00
    dm-0              0.00     0.00    0.00    1.00     0.00     4.00     8.00     0.00    0.00    0.00    0.00   0.00   0.00
    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    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
    
    

    image

    每个进程使用磁盘信息(每个1秒): pidstat -d 1 -p 进程号

    [root@tesm-jenkins-16-32 ~]# pidstat -d 1 -p 1214
    Linux 3.10.0-693.21.1.el7.x86_64 (tesm-jenkins-16-32)   06/13/2019      _x86_64_        (8 CPU)
    
    04:41:17 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
    04:41:18 PM   997      1214      0.00      0.00      0.00  java
    04:41:19 PM   997      1214      0.00      8.00      0.00  java
    04:41:20 PM   997      1214      0.00      0.00      0.00  java
    04:41:21 PM   997      1214      0.00      0.00      0.00  java
    04:41:22 PM   997      1214      0.00      0.00      0.00  java
    
    

    网络IO: ifstat [默认本地没有,需下载]

    1、卸载原装ifstat
    find / -name ifstat
    /usr/sbin/ifstat、ifstat的man目录的.gz文件删除
    2、下载安装
    wget http://gael.roualland.free.fr/ifstat/ifstat-1.1.tar.gz
    tar xzvf ifstat-1.1.tar.gz
    cd ifstat-1.1
    ./configure
    make
    make install
    cp ifstat /usr/sbin/
    
    [root@node3 ifstat-1.1]# ifstat 1
           eth0                eth1              docker0      
     KB/s in  KB/s out   KB/s in  KB/s out   KB/s in  KB/s out
        0.00      0.00     19.05   1377.84      0.00      0.00
        0.00      0.00     19.54   1388.09      0.00      0.00
        0.00      0.00     19.39   1282.41      0.00      0.00
        0.00      0.00     19.78   1392.49      0.00      0.00
        0.00      0.00     19.85   1403.73      0.00      0.00
        0.00      0.00     20.42   1383.93      0.00      0.00
        0.00      0.00     18.46   1278.94      0.00      0.00
        0.00      0.00     19.80   1399.47      0.00      0.00
        0.00      0.00     18.27   1271.58      0.00      0.00
        0.00      0.00     17.58   1268.47      0.00      0.00
        0.00      0.00     19.60   1392.27      0.00      0.00
        0.00      0.00     20.13   1393.69      0.00      0.00
        0.00      0.00     19.90   1386.89      0.00      0.00
        0.00      0.00     18.04   1277.04      0.00      0.00
        0.00      0.00     21.35   1513.58      0.00      0.00
        0.00      0.00     18.23   1283.19      0.00      0.00
        0.00      0.00     17.93   1275.76      0.00      0.00
    
    

    pidstat参数说明

    • -u:默认的参数,显示各个进程的cpu使用统计
    • -r:显示各个进程的内存使用统计
    • -d:显示各个进程的磁盘IO使用情况
    • -p:指定进程号

    image

  • 相关阅读:
    Oracle执行计划(三)
    执行计划-数据访问方式(全表扫描与4种索引的方式)
    比较两个文件内容是否相同
    设置myeclipse控制台输出到文件中
    Java出现NoSuchElementException异常
    Spring-Aop编程(三)-AspectJ
    Spring AOP编程(二)-AOP实现的三种方式
    Spring AOP编程(一)-AOP介绍
    java.lang.OutOfMemoryError: GC overhead limit exceeded异常处理
    Spring 属性依赖注入
  • 原文地址:https://www.cnblogs.com/xhyouyou/p/12465442.html
Copyright © 2020-2023  润新知