Linux系统负载高排查指南

指南

Linux系统负载高排查指南_第1张图片

1.top

  • 查看机器整体的负载情况,主要包含CPU、内存使用率,进程负载情况,交换区使用
  • 使用好习惯:top命令执行之后,再按一下数字键1,显示所有CPU的详细情况

示例:

top - 09:44:56 up 16 days, 21:23,  1 user,  load average: 9.59, 4.75, 1.92
Tasks: 145 total,   2 running, 143 sleeping,   0 stopped,   0 zombie
Cpu(s): 99.8%us,  0.1%sy,  0.0%ni,  0.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   4147888k total,  2493092k used,  1654796k free,   158188k buffers
Swap:  5144568k total,       56k used,  5144512k free,  2013180k cached


  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 4871 root      20   0  988780 152828  12632 S  12.0  0.5  10435:58 consul
 4156 root      20   0 7034592 953148  12384 S   7.0  2.9   2146:50 java
19083 root      20   0 6958356 904376  12484 S   6.6  2.7 589:30.91 java
27818 root      20   0 6953012 993160  12468 S   6.6  3.0   1120:31 java
  396 root      20   0 6935492 904640  12564 S   6.3  2.7 451:50.11 java
30140 root      20   0 6862880 871176  16384 S   6.3  2.6  44:23.11 java
27980 root      20   0 6705824   1.1g   8340 S   3.7  3.4   3690:07 java
省略其他。。。


按数字键1之后:8核CPU会显示详细信息
%Cpu0  :  3.7 us,  2.3 sy,  0.0 ni, 93.6 id,  0.0 wa,  0.0 hi,  0.3 si,  0.0 st
%Cpu1  :  4.0 us,  2.0 sy,  0.0 ni, 94.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  4.7 us,  1.7 sy,  0.0 ni, 93.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :  4.0 us,  2.7 sy,  0.0 ni, 93.0 id,  0.3 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu4  :  4.3 us,  2.7 sy,  0.0 ni, 93.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu5  :  3.7 us,  2.0 sy,  0.0 ni, 94.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu6  :  5.0 us,  2.7 sy,  0.0 ni, 92.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu7  :  4.0 us,  2.7 sy,  0.0 ni, 93.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

解释:

第一行:任务队列信息,同 uptime 命令的执行结果

  • top - 09:44:56[当前系统时间],
  • 16 days[系统已经运行了16天],
  • 1 user[个用户当前登录],
  • load average: 9.59, 4.75, 1.92[系统负载,即任务队列的平均长度,三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值]

第二行:Tasks — 任务(进程)信息

  • Tasks: 145 total[总进程数],
  • 2 running[正在运行的进程数],
  • 143 sleeping[睡眠的进程数],
  • 0 stopped[停止的进程数],
  • 0 zombie[冻结进程数],

第三行:cpu状态信息

  • Cpu(s): 99.8%us[用户空间占用CPU百分比],
  • 0.1%sy[内核空间占用CPU百分比],
  • 0.0%ni[用户进程空间内改变过优先级的进程占用CPU百分比],
  • 0.2%id[空闲CPU百分比],
  • 0.0%wa[等待输入输出的CPU时间百分比],
  • 0.0%hi[硬中断(Hardware IRQ)占用CPU的百分比],
  • 0.0%st[软中断(Software Interrupts)占用CPU的百分比],

第四行:内存状态信息

  • Mem: 4147888k total[物理内存总量],
  • 2493092k used[使用的物理内存总量],
  • 1654796k free[空闲内存总量],
  • 158188k buffers[用作内核缓存的内存量]

第五行:swap交换分区信息

  • Swap: 5144568k total[交换区总量],
  • 56k used[使用的交换区总量],
  • 5144512k free[空闲交换区总量],
  • 2013180k cached[缓冲的交换区总量],

第六行:空行

第七行:各进程(任务)的状态监控信息

  • PID — 进程id

  • USER — 进程所有者

  • PR — 进程优先级

  • NI — nice值。负值表示高优先级,正值表示低优先级

  • VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES

  • RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA

  • SHR — 共享内存大小,单位kb

  • S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程

  • %CPU — 上次更新到现在的CPU时间占用百分比

  • %MEM — 进程使用的物理内存百分比

  • TIME+ — 进程使用的CPU时间总计,单位1/100秒

  • COMMAND — 进程名称(命令名/命令行)

2.vmstat

  • vmstat可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况
  • 和top的区别在于,top的机器整体指标数据更模糊,vmstat更详细;top展示了每一个进程的负载,vmstat展示的是整个机器整体情况
  • vmstat 2 3 :表示每隔2秒刷新一次数据结果,且只展示3次

实例:

[root@XMZXZY-T-ZXB-zxb-centos-100 ~]# vmstat 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
 2  0      0 687208 131696 17148096    0    0     0    10    0    0  6  2 92  0  0
 0  0      0 686812 131696 17148240    0    0     0    18 5769 60837  4  3 93  0  0
 1  0      0 686828 131696 17148276    0    0     0    48 4240 57250  3  2 95  0  0

解释:

  • procs

r #表示运行队列(就是说多少个进程真的分配到CPU),当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。

b #表示阻塞的进程,在等待资源的进程,这个不多说,进程阻塞,大家懂的。

  • memory

swpd #虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。

free # 空闲的物理内存的大小

buff #Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存

cache #cache直接用来记忆我们打开的文件,给文件做缓冲,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。

  • swap

si #每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。

so #每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。

  • io

bi #块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte

bo #块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。

bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。

  • system

in #每秒CPU的中断次数,包括时间中断

cs #每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目

  • cpu

us #用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。

sy #系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。

id #空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。

wt #等待IO CPU时间。

3.iostat

  • 通过iostat方便查看CPU、网卡、tty设备、磁盘、CD-ROM 等等设备的活动情况,负载信息。

  • 格式:iostat[参数][时间][次数]

重要的参数:

-d 显示磁盘使用情况

-N 显示磁盘阵列(LVM) 信息

-n 显示NFS 使用情况

-p[磁盘] 显示磁盘和分区的情况

-x 显示详细信息

示例:

[root@XMZXZY-T-ZXB-zxb-centos-100 ~]# iostat -dx 1 3
Linux 3.10.0-862.11.6.el7.x86_64 (XMZXZY-T-ZXB-zxb-centos-100) 	2022年06月21日 	_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
fd0               0.00     0.00    0.00    0.00     0.00     0.00     8.00     0.00   56.91   56.91    0.00  56.91   0.00
scd0              0.00     0.00    0.00    0.00     0.00     0.00     6.36     0.00    0.79    0.79    0.00   0.79   0.00
sda               0.00     0.01    0.01    2.35     0.30    40.60    34.77     0.00    0.77    1.94    0.77   0.17   0.04
sdb               0.00     0.00    0.00    0.00     0.00     6.39 47467.32     0.00   10.53    0.19   12.46   0.17   0.00
sdc               0.00     1.18    0.00    1.19     0.15    88.23   148.49     0.01   12.12   45.28   12.03   1.70   0.20

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
fd0               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
scd0              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
sda               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
sdb               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
sdc               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
fd0               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
scd0              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
sda               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
sdb               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
sdc               0.00     6.00    0.00    3.00     0.00    36.00    24.00     0.01    3.33    0.00    3.33   2.33   0.70

解释:

  • Device 监测设备名称
  • rrqm/s 每秒需要读取需求的数量
  • wrqm/s 每秒需要写入需求的数量
  • r/s 每秒实际读取需求的数量
  • w/s 每秒实际写入需求的数量
  • rsec/s 每秒读取区段的数量
  • wsec/s 每秒写入区段的数量
  • rkB/s 每秒实际读取的大小,单位为KB
  • wkB/s 每秒实际写入的大小,单位为KB
  • avgrq-sz 需求的平均大小区段
  • avgqu-sz 需求的平均队列长度
  • await 等待I/O平均的时间(milliseconds)
  • svctm I/O需求完成的平均时间
  • %util 被I/O需求消耗的CPU百分比

备注:

如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明I/O队列太长,io响应太慢,则需要进行必要优化。如果avgqu-sz比较大,也表示有当量io在等待。

4.神器-sar

  • sar命令可以从文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等方面进行报告
  • 格式:sar(选项)(参数)
  • -o file_name 表示将结果存到file_name指定的文件中
  • top iostat vmstat 能查看的指标sar都能查看,这里主要介绍网络设备相关信息
-A:显示所有的报告信息;
-b:显示I/O速率;
-B:显示换页状态;
-c:显示进程创建活动;
-d:显示每个块设备的状态;
-e:设置显示报告的结束时间;
-f:从指定文件提取报告;
-i:设状态信息刷新的间隔时间;
-P:报告每个CPU的状态;
-R:显示内存状态;
-u:显示CPU利用率;
-v:显示索引节点,文件和其他内核表的状态;
-w:显示交换分区状态;
-x:显示给定进程的状态

4.1 CPU监控

[root@XMZXZY-T-ZXB-zxb-centos-100 ~]# sar -u 1 3
Linux 3.10.0-862.11.6.el7.x86_64 (XMZXZY-T-ZXB-zxb-centos-100) 	2022年06月21日 	_x86_64_	(8 CPU)

14时33分19秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
14时33分20秒     all      4.17      0.00      2.28      0.13      0.00     93.43
14时33分21秒     all      3.55      0.00      2.28      0.00      0.00     94.17
14时33分22秒     all      3.68      0.00      2.41      0.00      0.00     93.92
平均时间:     all      3.80      0.00      2.32      0.04      0.00     93.84

解释:

CPU:all表示统计信息为所有 CPU的平均值。

%user:显示在用户级别(application)运行使用 CPU总时间的百分比。

%nice:显示在用户级别,用于nice操作,所占用 CPU总时间的百分比。

%system:在核心级别(kernel)运行所使用 CPU总时间的百分比。

%iowait:显示用于等待I/O操作占用 CPU总时间的百分比。

%steal:管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟CPU 的百分比。

%idle:显示 CPU空闲时间占用 CPU总时间的百分比。


所以:
1.若 %iowait的值过高,表示硬盘存在I/O瓶颈

2.若 %idle的值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量

3.若 %idle的值持续低于1,则系统的CPU处理能力相对较低,表明系统中最需要解决的资源是 CPU。
[root@XMZXZY-T-ZXB-zxb-centos-100 ~]# sar -n DEV 1 2
Linux 3.10.0-862.11.6.el7.x86_64 (XMZXZY-T-ZXB-zxb-centos-100) 	2022年06月21日 	_x86_64_	(8 CPU)

14时21分13秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
14时21分14秒      eth0    478.00    297.00    293.51     76.94      0.00      0.00      0.00
14时21分14秒        lo    248.00    248.00    299.00    299.00      0.00      0.00      0.00

14时21分14秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
14时21分15秒      eth0    404.00    395.00     58.91    137.63      0.00      0.00      0.00
14时21分15秒        lo    226.00    226.00    164.16    164.16      0.00      0.00      0.00

平均时间:     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
平均时间:      eth0    441.00    346.00    176.21    107.29      0.00      0.00      0.00
平均时间:        lo    237.00    237.00    231.58    231.58      0.00      0.00      0.00

4.2 磁盘IO速率监控

[root@XMZXZY-T-ZXB-zxb-centos-100 ~]# sar -b 1 3
Linux 3.10.0-862.11.6.el7.x86_64 (XMZXZY-T-ZXB-zxb-centos-100) 	2022年06月21日 	_x86_64_	(8 CPU)

14时36分49秒       tps      rtps      wtps   bread/s   bwrtn/s
14时36分50秒      5.00      0.00      5.00      0.00    104.00
14时36分51秒      0.00      0.00      0.00      0.00      0.00
14时36分52秒      0.00      0.00      0.00      0.00      0.00
平均时间:      1.67      0.00      1.67      0.00     34.67

解释:

tps:每秒钟物理设备的 I/O传输总量

rtps:每秒钟从物理设备读入的数据总量

wtps:每秒钟向物理设备写入的数据总量

bread/s:每秒钟从物理设备读入的数据量,单位为块/s

bwrtn/s:每秒钟向物理设备写入的数据量,单位为块/s

4.3 统计网络信息(很重要)

sar -n 的所有选项:DEV,EDEV,NFS,NFSD,SOCK,IP,EIP,ICMP,EICMP,TCP,ETCP,UDP,SOCK6,IP6,EIP6,ICMP6,EICMP6,UDP6

其中常用的解释:

  • DEV显示网络接口信息,
  • EDEV显示关于网络错误的统计数据,
  • SOCK显示套接字信息,
  • ALL显示所有5个开关。它们可以单独或者一起使用。
4.3.1 查看网卡数据整体信息
[root@XMZXZY-T-ZXB-zxb-centos-100 ~]# sar -n DEV 1 3
Linux 3.10.0-862.11.6.el7.x86_64 (XMZXZY-T-ZXB-zxb-centos-100) 	2022年06月21日 	_x86_64_	(8 CPU)

14时44分12秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
14时44分13秒      eth0    282.00    248.00     41.60    119.56      0.00      0.00      0.00
14时44分13秒        lo    235.00    235.00    191.03    191.03      0.00      0.00      0.00

14时44分13秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
14时44分14秒      eth0    330.00    308.00     36.77    101.84      0.00      0.00      0.00
14时44分14秒        lo    234.00    234.00    207.68    207.68      0.00      0.00      0.00

14时44分14秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
14时44分15秒      eth0    308.00    305.00     29.90     68.66      0.00      0.00      0.00
14时44分15秒        lo    218.00    218.00    151.42    151.42      0.00      0.00      0.00

平均时间:     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
平均时间:      eth0    306.67    287.00     36.09     96.69      0.00      0.00      0.00
平均时间:        lo    229.00    229.00    183.38    183.38      0.00      0.00      0.00

解释:

#IFACE 本地网卡接口的名称

#rxpck/s 每秒钟接受的数据包

#txpck/s 每秒钟发送的数据库

#rxKB/S 每秒钟接受的数据包大小,单位为KB

#txKB/S 每秒钟发送的数据包大小,单位为KB

#rxcmp/s 每秒钟接受的压缩数据包

#txcmp/s 每秒钟发送的压缩包

#rxmcst/s 每秒钟接收的多播数据包

4.4 查看磁盘设备使用情况

  • -p 表示显示逻辑名称,类似于a盘,b盘
[root@XMZXZY-T-ZXB-zxb-centos-100 ~]# sar -d 1 3 -p
Linux 3.10.0-862.11.6.el7.x86_64 (XMZXZY-T-ZXB-zxb-centos-100) 	2022年06月21日 	_x86_64_	(8 CPU)

14时45分49秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
14时45分50秒       fd0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
14时45分50秒       sr0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
14时45分50秒       sda      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
14时45分50秒       sdb      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
14时45分50秒       sdc      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

14时45分50秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
14时45分51秒       fd0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
14时45分51秒       sr0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
14时45分51秒       sda     15.00      0.00   1288.00     85.87      0.00      0.00      0.00      0.00
14时45分51秒       sdb      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
14时45分51秒       sdc      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

14时45分51秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
14时45分52秒       fd0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
14时45分52秒       sr0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
14时45分52秒       sda      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
14时45分52秒       sdb      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
14时45分52秒       sdc      2.00      0.00     40.00     20.00      0.01      3.00      3.00      0.60

平均时间:       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
平均时间:       fd0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
平均时间:       sr0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
平均时间:       sda      5.00      0.00    429.33     85.87      0.00      0.00      0.00      0.00
平均时间:       sdb      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
平均时间:       sdc      0.67      0.00     13.33     20.00      0.00      3.00      3.00      0.20

解释:

tps:每秒I/O的传输总数
rd_sec/s 每秒读取的扇区的总数
wr_sec/s 每秒写入的扇区的总数
avgrq-sz 平均每次次磁盘I/O操作的数据大小(扇区)
avgqu-sz 磁盘请求队列的平均长度
await 从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,
  包括请求队列等待时间,单位是毫秒(1秒等于1000毫秒),等于寻道时间+队列时间+服务时间
svctm I/O的服务处理时间,即不包括请求队列中的时间
%util I/O请求占用的CPU百分比,值越高,说明I/O越慢

你可能感兴趣的:(Linux学习篇,linux,服务器,网络,负载均衡)