当服务器遇到问题,或者提前查看服务器质量怎么样,一般可以通过以下几点分析:服务器整体情况,CPU使用情况,内存,磁盘,磁盘io,网络io等。

不同环境插件安装

  • centos

yum install sysstat -y

  • ubuntu

apt install sysstat -y

1、整体分析之top

  • 执行top指令
root@master2:~# top
top - 10:41:30 up 6 days, 11:23,  1 user,  load average: 0.98, 0.66, 0.57
Tasks: 304 total,   1 running, 200 sleeping,   0 stopped,   2 zombie
%Cpu(s):  3.1 us,  0.7 sy,  0.0 ni, 95.5 id,  0.6 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 32937840 total, 25930000 free,  2666144 used,  4341696 buff/cache
KiB Swap:        0 total,        0 free,        0 used. 30586896 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
28484 root      20   0 1468632 1.280g  68832 S  39.1  4.1 260:25.96 kube-apiserver
25442 root      20   0 10.277g 308160  80692 S   9.3  0.9 166:39.40 etcd
  • 第 1 行:系统时间、运行时间、登录终端数、系统负载(三个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低)。
  • 第 2 行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。一般情况下,只要没有僵死的进程,就没啥大问题。
  • 第 3 行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。
  • 第 4 行:物理内存总量、内存空闲量、内存使用量、作为内核缓存的内存量。
  • 第 5 行:虚拟内存总量、虚拟内存空闲量、虚拟内存使用量、已被提前加载的内存量。
  • 第 6 行里面主要看 PID 和 COMMAND 这两个参数,其中 PID 就是进程 ID , COMMAND 就是执行的命令,能够看到比较靠前的两个进程都是k8s进程。
  • 干掉僵尸进程的指令,ps -A -ostat,ppid | grep -e '^[Zz]' | awk '{print $2}' | xargs kill -HUP > /dev/null 2>&1
  • 在当前这个界面,按下数字键盘 1 能够看到各个 CPU 的详细利用率
top - 10:46:53 up 6 days, 11:29,  1 user,  load average: 0.15, 0.53, 0.57
Tasks: 303 total,   1 running, 200 sleeping,   0 stopped,   2 zombie
%Cpu0  :  1.7 us,  1.3 sy,  0.0 ni, 96.3 id,  0.7 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  2.0 us,  0.7 sy,  0.0 ni, 97.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  0.7 us,  0.3 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

2、cpu分析之vmstat

一般 vmstat 工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔,单位是秒,第二个参数是采样的次数,这次的命令是:vmstat -n 3 2 意思就是隔 3 秒取样一次,一共取样 2 次。

  • 执行vmstat指令
root@master2:~# vmstat -n 3 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
0  0      0 25910152 684436 3669440    0    0     1    38    4    0  5  2 89  1  3
3  0      0 25910008 684436 3669488    0    0     0   441 8905 15261  1  1 97  1  0

2.1、procs:

  • r :运行和等待 CPU 时间片的进程数,一般来说整个系统的运行队列不要超过总核数的 2 倍,要不然系统压力太大了。
  • b : 等待资源的进程数,比如正在等待磁盘 IO ,网络 IO 这种。

2.2、cpu:

  • us :用户进程消耗 CPU 时间百分比, us 值高的话,说明用户进程消耗 CPU 时间比较长,如果长期大于 50% 的话,那就说明程序还有需要优化的地方。
  • sy :内核进程消耗的 CPU 时间百分比。
  • us + sy 参考值为 80% ,如果大于 80% 的话,说明可能存在 CPU 不足。

3、内存分析之free

一般我们使用free -m即可

root@master2:~# free -m
              total        used        free      shared  buff/cache   available
Mem:          32165        2608       25354          13        4203       29861
Swap:             0           0           0
  • 如果应用程序可用内存/系统物理内存大于 70% 的话,说明内存是充足的,没啥问题,但是如果小于 20% 的话,就要考虑增加内存了。

4、磁盘分析之df

排查磁盘问题,首先要排查磁盘空间够不够,df和du就可以。df查看磁盘使用情况;du查看目录占用磁盘情况及子文件占用情况。

root@master2:~# df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs   16G     0   16G   0% /dev
tmpfs          tmpfs     3.2G   14M  3.2G   1% /run
/dev/vda2      ext4       99G  9.4G   84G  11% /
tmpfs          tmpfs      16G     0   16G   0% /dev/shm
tmpfs          tmpfs     5.0M     0  5.0M   0% /run/lock
tmpfs          tmpfs      16G     0   16G   0% /sys/fs/cgroup

root@master2:~# du -sh
516M    .
root@master2:~# du -sh *
16K     1.sh
434M    etcd
82M     etcd.tar.gz
4.0K    etcd.txt
root@master2:~# du -h --max-depth=1
4.0K    ./.cache
8.0K    ./.gnupg
8.0K    ./.ansible
434M    ./etcd
948K    ./.kube
8.0K    ./.ssh
8.0K    ./.vim
516M    .

5、磁盘io分析之iostat

在对数据库进行操作时,第一要考虑就是磁盘io操作,因为相对来说,如果在某个时间段给磁盘进行大量的写入操作会造成程序等待时间长,导致客户端那边好久都没啥反应。

root@master2:~# iostat -xdk 3 2
Linux 4.15.0-115-generic (master2)      09/11/2020      _x86_64_        (16 CPU)

Device            r/s     w/s     rkB/s     wkB/s   rrqm/s   wrqm/s  %rrqm  %wrqm r_await w_await aqu-sz rareq-sz wareq-sz  svctm  %util
loop0            0.00    0.00      0.02      0.00     0.00     0.00   0.00   0.00    1.75    0.00   0.00    18.07     0.00   0.16   0.00
loop1            0.05    0.00      0.07      0.00     0.00     0.00   0.00   0.00    1.66    0.00   0.00     1.49     0.00   0.06   0.00
vda              0.74   19.38     18.68    154.10     0.00    10.14   0.07  34.35    6.74   17.52   0.28    25.39     7.95   0.79   1.60

Device            r/s     w/s     rkB/s     wkB/s   rrqm/s   wrqm/s  %rrqm  %wrqm r_await w_await aqu-sz rareq-sz wareq-sz  svctm  %util
loop0            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   0.00   0.00
loop1            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   0.00   0.00
vda              0.00    7.00      0.00     61.33     0.00     6.00   0.00  46.15    0.00    1.33   0.00     0.00     8.76   0.00   0.00
  • rkB/s :每秒读取数据量 kB 。
  • wkB/s :每秒写入数据量 kB 。
  • svctm :I/O 请求的平均服务时间,单位毫秒。
  • util :一秒中有百分之几的时间用于 I/O 操作,如果接近 100% 说明磁盘带宽跑满了,这个时候就要优化程序或者增加磁盘了。

6、网络io分析之sar

网络 IO 的话,可以通过 sar -n DEV 3 2 这条命令来看,和上面的差不多,意思就是每隔 3 秒取样一次,一共取样 2 次。

root@master2:~# sar -n DEV 3 2
Linux 4.15.0-115-generic (master2)      09/11/2020      _x86_64_        (16 CPU)

11:06:46 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
11:06:49 AM      eth0    854.33    859.33    199.93    210.99      0.00      0.00      0.00      0.00
11:06:49 AM     tunl0    113.67    108.33     10.92      9.86      0.00      0.00      0.00      0.00
11:06:49 AM calide035c655d8     98.33    108.33     11.04     12.63      0.00      0.00      0.00      0.00
11:06:49 AM        lo     58.00     58.00     13.18     13.18      0.00      0.00      0.00      0.00
11:06:49 AM cali3d31c61f18c      6.00      3.33      4.41      2.08      0.00      0.00      0.00      0.00
11:06:49 AM nodelocaldns      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
11:06:49 AM kube-ipvs0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
11:06:49 AM cali7d0b83575fc      7.00      8.00      2.46      0.81      0.00      0.00      0.00      0.00
11:06:49 AM cali056accc6554     24.33     21.00      2.93     10.81      0.00      0.00      0.00      0.00
11:06:49 AM   docker0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

11:06:49 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
11:06:52 AM      eth0    623.67    620.00    109.84    127.33      0.00      0.00      0.00      0.00
11:06:52 AM     tunl0     97.33     90.00      6.64      8.74      0.00      0.00      0.00      0.00
11:06:52 AM calide035c655d8     93.67    104.00     10.52      8.68      0.00      0.00      0.00      0.00
11:06:52 AM        lo     65.67     65.67     11.60     11.60      0.00      0.00      0.00      0.00
11:06:52 AM cali3d31c61f18c      6.00      3.67      5.62      2.78      0.00      0.00      0.00      0.00
11:06:52 AM nodelocaldns      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
11:06:52 AM kube-ipvs0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
11:06:52 AM cali7d0b83575fc      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
11:06:52 AM cali056accc6554      3.67      2.33      0.24      0.39      0.00      0.00      0.00      0.00
11:06:52 AM   docker0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
Average:         eth0    739.00    739.67    154.89    169.16      0.00      0.00      0.00      0.00
Average:        tunl0    105.50     99.17      8.78      9.30      0.00      0.00      0.00      0.00
Average:    calide035c655d8     96.00    106.17     10.78     10.65      0.00      0.00      0.00      0.00
Average:           lo     61.83     61.83     12.39     12.39      0.00      0.00      0.00      0.00
Average:    cali3d31c61f18c      6.00      3.50      5.02      2.43      0.00      0.00      0.00      0.00
Average:    nodelocaldns      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:    kube-ipvs0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:    cali7d0b83575fc      3.50      4.00      1.23      0.40      0.00      0.00      0.00      0.00
Average:    cali056accc6554     14.00     11.67      1.58      5.60      0.00      0.00      0.00      0.00
Average:      docker0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
  • IFACE :LAN 接口
  • rxpck/s :每秒钟接收的数据包
  • txpck/s :每秒钟发送的数据包
  • rxKB/s :每秒接收的数据量,单位 KByte
  • txKB/s :每秒发出的数据量,单位 KByte
  • rxcmp/s :每秒钟接收的压缩数据包
  • txcmp/s :每秒钟发送的压缩数据包
  • rxmcst/s:每秒钟接收的多播数据包