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

整机: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

posted @ 2019-10-24 12:59  要好好吃饭  阅读(355)  评论(0编辑  收藏  举报