一、阈值
util应在10%以内(或者top命令查看,%wa很高而%us偏低时,可能存在IO瓶颈)
[root@k8s-master ~]# iostat -xkd 1
Linux 3.10.0-1160.108.1.el7.x86_64 (k8s-master) 02/27/2024 _x86_64_ (2 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.19 3.07 7.30 172.03 72.21 47.10 0.01 0.64 1.03 0.48 0.31 0.32
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 8.00 0.00 32.00 8.00 0.01 0.62 0.00 0.62 0.38 0.30
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 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 9.00 0.00 36.00 8.00 0.00 0.22 0.00 0.22 0.11 0.10
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 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 8.00 0.00 35.00 0.00 292.50 16.71 0.04 1.14 0.00 1.14 0.23 0.80
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 10.00 14.00 288.00 62.50 29.21 0.01 0.25 0.30 0.21 0.25 0.60
iostat 是 Linux 系统中用于监控系统输入输出设备负载情况的命令,-xkd 1 参数分别表示:
1. -x:显示扩展统计信息,包括设备利用率 %util 等。
2. -k:以 KB 为单位显示传输量。
3. -d:仅显示块设备统计信息(如磁盘)。
4. 1:后面跟的时间间隔参数,表示每隔 1 秒采集一次数据。
以下是您提供的 iostat 输出结果各字段的含义:
1. Device:设备名称,在这里为sda,即第一块 SCSI 或 SATA 磁盘设备。
2. rrqm/s:每秒读取请求合并次数(Read requests merged per second)。
3. wrqm/s:每秒写入请求合并次数(Write requests merged per second)。
4. r/s:每秒读取操作次数(Read operations per second)。
5. w/s:每秒写入操作次数(Write operations per second)。
6. rkB/s:每秒读取的数据量,单位KB(Read Kilobytes per second)。
7. wkB/s:每秒写入的数据量,单位KB(Write Kilobytes per second)。
8. avgrq-sz:平均每次IO请求的扇区数(Average Request Size)。
9. avgqu-sz:每个设备的平均等待队列长度(Average Queue Length)。
10. await:所有IO请求的平均服务时间,包括等待时间和处理时间(Average Time for I/O Operations to Complete)。
11. r_await:只针对读请求的平均服务时间。
12. w_await:只针对写请求的平均服务时间。
13. svctm:I/O 请求的服务时间(Service Time),即完成单个 I/O 请求所花费的时间。
14. %util:设备利用率,即一秒中有百分之多少的时间用于处理 I/O 请求。如果该值持续接近100%,则可能存在I/O瓶颈。
top - 18:20:56 up 4:35, 3 users, load average: 0.38, 0.50, 0.46
Tasks: 268 total, 1 running, 267 sleeping, 0 stopped, 0 zombie
%Cpu(s): 4.4 us, 3.0 sy, 0.0 ni, 92.1 id, 0.0 wa, 0.0 hi, 0.5 si, 0.0 st
KiB Mem : 3861084 total, 182496 free, 1937152 used, 1741436 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 1614960 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4048 root 20 0 1111868 322376 45340 S 6.3 8.3 14:29.45 kube-apiserver
976 root 20 0 1655316 83296 36640 S 3.3 2.2 8:40.70 kubelet
2337 root 20 0 825616 91600 32792 S 1.7 2.4 6:23.68 kube-controller
3705 root 20 0 10.7g 60492 15588 S 1.3 1.6 4:15.50 etcd
5788 root 20 0 1672716 44036 22024 S 1.3 1.1 3:49.83 calico-node
1158 root 20 0 1905868 89692 27864 S 1.0 2.3 3:27.24 dockerd
2865 root 20 0 3545624 234616 81236 S 1.0 6.1 2:42.34 gnome-shell
3039 root 9 -11 1285548 9644 4664 S 1.0 0.2 0:08.30 pulseaudio
4539 root 20 0 720048 10624 4224 S 0.7 0.3 0:03.45 containerd-shim
299 root 20 0 0 0 0 S 0.3 0.0 0:11.10 xfsaild/sda3
3675 root 20 0 754540 38892 18576 S 0.3 1.0 0:48.20 kube-scheduler
5220 polkitd 20 0 1125568 32332 16188 S 0.3 0.8 0:04.38 kube-controller
5237 root 20 0 750568 32308 15192 S 0.3 0.8 0:19.05 coredns
23628 root 20 0 694172 33548 19204 S 0.3 0.9 0:24.84 gnome-terminal-
119975 root 20 0 164328 2476 1612 R 0.3 0.1 0:00.06 top
1 root 20 0 128760 7496 4256 S 0.0 0.2 0:23.25 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:05.76 ksoftirqd/0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.40 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:23.25 rcu_sched
10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain
11 root rt 0 0 0 0 S 0.0 0.0 0:00.10 watchdog/0
12 root rt 0 0 0 0 S 0.0 0.0 0:00.09 watchdog/1
13 root rt 0 0 0 0 S 0.0 0.0 0:00.38 migration/1
14 root 20 0 0 0 0 S 0.0 0.0 0:05.73 ksoftirqd/1
16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/1:0H
18 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
20 root 20 0 0 0 0 S 0.0 0.0 0:00.01 khungtaskd
21 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 writeback
22 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kintegrityd
23 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
top命令详细解释
top:是一个基于终端的实时进程查看器命令,可以用来查看系统进程的信息,包括进程的PID、CPU使用率、内存使用情况等,还可以进行一些操作,如发送信号、调整优先级等。
05:49:19:表示当前系统时间,格式为hh:mm:ss。
up 1:35:表示系统已经运行了1小时35分钟,即系统的运行时间。
3 users:表示当前登录系统的用户数量。
load average: 0.10, 0.06, 0.06:分别表示系统的平均负载,过去1分钟、5分钟、15分钟内的平均负载。
Tasks: 222 total, 1 running, 221 sleeping, 0 stopped, 0 zombie:表示当前系统中所有进程的情况,其中:
total:所有进程的数量。running:正在运行的进程数量。sleeping:休眠状态的进程数量。stopped:已停止的进程数量。zombie:僵尸进程的数量。
%Cpu(s): 0.2 us, 0.0 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st:表示CPU的使用情况,其中:
us:用户态CPU时间占用百分比。sy:内核态CPU时间占用百分比。ni:优先级较高的进程CPU时间占用百分比。id:CPU空闲时间占用百分比。wa:等待I/O数据的CPU时间占用百分比。hi:硬件中断时间占用百分比。si:软件中断CPU时间占用百分比。st:使用虚拟化技术的情况下,用于处理其他虚拟机需要的CPU时间占用百分比。
KiB Mem : 1863252 total, 98244 free, 1133500 used, 631508 buff/cache:表示内存使用情况,其中:
total:内存总量。free:空闲内存量。used:已使用内存量。buff/cache:Buffer和Cache占用的内存量
KiB Swap: 2097148 total, 2094836 free, 2312 used. 438260 avail Mem:表示交换空间使用情况,其中:
total:交换空间总量。free:空闲交换空间大小。used:已使用交换空间大小。avail Mem:可用内存大小
让我们逐个解释每个字段:
PID(进程ID): 每个正在运行的进程都有一个唯一的进程ID,用来标识进程。可以通过该ID来查找和操作进程。
USER(用户): 运行该进程的用户。
PR(优先级): 进程的优先级。可以是一个静态值(3-20)或一个动态值(即一个负数)。
NI(Nice值): 进程的Nice值,用于调整进程调度的优先级。较高的Nice值表示较低的优先级。
VIRT(虚拟内存): 进程使用的虚拟内存大小,包括所有分配给进程的虚拟内存区域的大小。
RES(常驻内存): 进程使用的物理内存大小,即常驻内存区域的大小。
SHR(共享内存): 进程使用的共享内存大小,即多个进程共享的内存区域的大小。
S(状态): 进程的状态。常见的状态包括:R(运行)、S(睡眠)、Z(僵尸)、D(不可中断的睡眠)等。
%CPU%MEM: 进程的CPU和内存使用率。
TIME+(运行时间): 进程已经运行的时间。
COMMAND(命令): 运行的命令或脚本的名称。
-
命令:
top
-
作用:实时查看系统运行情况和健康状态。
-
命令与参数:
|-----|-----------|---------------|--------------|
| 命令名 | 更新时间间隔(秒) | 不显示任何闲置或者僵死进程 | 通过进程id监控单一进程 |
| top | -d 间隔秒数 | -i | -p 进程id |
- 操作控制:
|----|------------------|
| 按键 | 功能 |
| P | 默认值,根据CPU使用率排序 |
| M | 以内存的使用率排序 |
| N | 以PID排序 |
| d | 设置数据刷新的时间间隔,单位是秒 |
| q | 退出 |
-
示例:指定间隔秒数,默认为 3 秒
top -d 2
-
示例:不显示僵尸进程
top -i
-
示例:监控单一线程
top -p 1189
- 示例:操作控制
- 示例:查询结果字段解释
- 第一行信息为任务队列信息:
|-------------------------------|-------------------------------------------------------|
| 内容举例 | 说明 |
| 14:12:01 | 系统当前时间 |
| up 6:04 | 系统的运行时间,前面例子表示本机已经运行6小时4分钟 |
| 2 users | 当前登录了2个用户 |
| load average:0.00, 0.02, 0.05 | 系统在之前1分钟,5分钟,15分钟的平均负载。 一般认为小于1时,负载较小。如果大于1,系统已经超出负荷。 |
- 第二行为进程信息:
|------------------|-----------------------|
| 内容举例 | 说明 |
| Tasks: 210 total | 系统中的进程总数 |
| 1 running | 正在运行的进程数 |
| 209 sleeping | 睡眠的进程 |
| 0 stopped | 正在停止的进程 |
| 0 zombie | 僵尸进程。如果不是0,需要手工检查僵尸进程 |
- 第三行为 CPU 信息:
|---------------|------------------------------------------------------------------------|
| 内容举例 | 说明 |
| Cpu(s):3.0%us | 用户空间占用的CPU百分比,us对应user |
| 3.0%sy | 内核空间占用的CPU百分比,sy对应system |
| 0.0%ni | 改变过优先级的进程占用的CPU百分比,ni对应niced |
| 93.9%id | 空闲CPU的CPU百分比 |
| 0.1%wa | 等待输入/输出的进程的占用CPU百分比,wa对应IO wait |
| 0.0%hi | 硬中断请求服务占用的CPU百分比,hi对应hardware IRQ |
| 0.0%si | 软中断请求服务占用的CPU百分比,si对应software IRQ |
| 0.0%st | st(Steal time)虚拟时间百分比,也叫被hypervisor偷走的时间。 就是当有虚拟机时,虚拟CPU等待实际CPU的时间百分比。 |
- 第四行为物理内存信息:
|--------------------|--------------|
| 内容举例 | 说明 |
| 3861295 total | 物理内存的总量,单位KB |
| 1037800 free | 空闲的物理内存数量 |
| 943564 used | 已经使用的物理内存数量 |
| 1879928 buff/cache | 作为缓冲的内存数量 |
-
使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是还未纳入内核管控范围的数量。
-
纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存还给 free ,因此 Linux 系统运行过程中 free 内存会越来越少,但不影响系统运行。因为这表示更多的空闲内存被内核管理了。
-
第五行为交换分区(swap)信息:
|-------------------|--------------------------|
| 内容举例 | 说明 |
| 3145724 total | 交换分区(虚拟内存)的总大小 |
| 3145724 free | 空闲交换分区的大小 |
| 0 used | 已经使用的交互分区的大小 |
| 2649008 avail Mem | 在不交换的情况下,对启动新应用程序可用内存的估计 |
交换分区是一个非常值得关注的地方,如果 swap 区的 used 数值持续发生变化那么说明在内核和交换分区之间正在持续发生数据交换,这表示内存不够用了------必须不断把内存中的数据保存到硬盘上。