February
24th,
2020
可以查询机器负载的命令
三个命令:w
, uptime
, top
[www@cloud-test-env79 ~]$ w
16:36:59 up 2:23, 1 user, load average: 19.02, 18.69, 18.31
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
www pts/1 10.3.2.67 16:36 2.00s 0.00s 0.00s w
[www@cloud-test-env79 ~]$ uptime
16:40:56 up 2:27, 1 user, load average: 18.40, 18.24, 18.20
top - 16:41:09 up 2:27, 1 user, load average: 18.25, 18.21, 18.19
什么是机器负载Load? 平均负载 Load Average
Load 就是对计算机干活多少的度量(WikiPedia:the system Load is a measure of the amount of work that a compute system is doing)简单的说是进程队列的长度。Load Average 就是一段时间(1分钟、5分钟、15分钟)内平均Load
如何判断Over Load
一般来说,根据CPU数量判断,如果平均负载始终再1.2
以下,机器是2
颗 CPU
。那么基本不会出现CPU不够用的情况。
也就是Load平均要小于CPU的数量,一般会根据15分钟那个load的平均值。
一般而言,服务器的合理负载是CPU核数*2
。也就是说对于8核的CPU,负载在16以内表明机器运行很稳定流畅。如果负载超过16了,就说明服务器的运行有一定的压力了。
我们如何排查机器高负载
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可实时动态监视操作系统的虚拟内存、进程、CPU活动。
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
18 0 16640 221116 0 1426276 0 1 133 195 2053 591 78 14 7 0 0
23 0 16640 245128 0 1426836 0 0 0 66 4208 1059 86 14 0 0 0
19 0 16640 227160 0 1427340 0 0 0 37 4144 1040 85 15 0 0 0
16 0 16640 259528 0 1428076 0 0 0 329 4090 1001 85 15 0 0 0
13 0 16640 261376 0 1428476 0 0 0 0 4087 1042 84 16 0 0 0
字段说明
Procs(进程):
r: 运行队列中进程数量 (如果长期大于1,说明cpu不足,需要增加cpu。)
b: 等待IO的进程数量 (比如正在等待I/O、或者内存交换等。)
Memory(内存):
swpd: 使用虚拟内存大小
free: 可用内存大小
buff: 用作缓冲的内存大小
cache: 用作缓存的内存大小
Swap:
si: 每秒从交换区写到内存的大小
so: 每秒写入交换区的内存大小
IO:(现在的Linux版本块的大小为1024bytes)
bi: 每秒读取的块数
bo: 每秒写入的块数
system:
in: 每秒中断数,包括时钟中断
cs: 每秒上下文切换数
CPU(以百分比表示)
us: 用户进程执行时间(user time)
sy: 系统进程执行时间(system time)
id: 空闲时间(包括IO等待时间)
wa: 等待IO时间
iostat 查看IO负载
[www@cloud-test-env79 ~]$ iostat 1 1
Linux 3.10.0-957.21.3.el7.x86_64 (cloud-test-env79) 02/24/2020 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
79.06 0.00 14.45 0.04 0.00 6.46
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 1.29 24.13 4.30 255262 45469
sdb 22.42 216.43 362.11 2289445 3830471
dm-0 0.87 21.18 1.65 224015 17504
dm-1 0.74 0.58 2.45 6156 25904
avg-cpu: 总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值
- %user: 在用户级别运行所使用的CPU的百分比.
- %nice: nice操作所使用的CPU的百分比.
- %sys: 在系统级别(kernel)运行所使用CPU的百分比.
- %iowait: CPU等待硬件I/O时,所占用CPU百分比.
- %idle: CPU空闲时间的百分比.
Device段:各磁盘设备的IO统计信息
- tps: 每秒钟发送到的I/O请求数.
- Blk_read /s: 每秒读取的block数.
- Blk_wrtn/s: 每秒写入的block数.
- Blk_read: 读入的block总数.
- Blk_wrtn: 写入的block总数.
sar 找出系统瓶颈的利器
查看CPU使用率 sar -u
02:13:57 PM LINUX RESTART
02:20:01 PM CPU %user %nice %system %iowait %steal %idle
02:30:01 PM all 38.17 0.00 6.64 0.02 0.00 55.17
02:40:02 PM all 84.96 0.00 15.01 0.00 0.00 0.03
02:50:01 PM all 84.93 0.00 15.03 0.00 0.00 0.04
03:00:01 PM all 84.69 0.00 15.27 0.00 0.00 0.04
03:10:01 PM all 84.62 0.00 15.35 0.00 0.00 0.04
03:20:01 PM all 83.92 0.00 16.05 0.00 0.00 0.03
03:30:01 PM all 84.98 0.00 14.98 0.00 0.00 0.04
03:40:02 PM all 84.88 0.00 15.07 0.00 0.00 0.05
03:50:01 PM all 84.63 0.00 15.34 0.00 0.00 0.03
04:00:02 PM all 84.86 0.00 15.09 0.00 0.00 0.04
04:10:02 PM all 84.56 0.00 15.41 0.00 0.00 0.04
04:20:01 PM all 83.73 0.00 16.24 0.00 0.00 0.03
04:30:02 PM all 83.97 0.00 15.99 0.00 0.00 0.04
04:40:01 PM all 83.84 0.00 16.13 0.00 0.00 0.03
04:50:02 PM all 84.77 0.00 15.22 0.00 0.00 0.01
Average: all 81.44 0.00 14.86 0.00 0.00 3.71
可以看到这台机器使用了虚拟化技术,有相应的时间消耗; 各列的指标分别是:
- %user 用户模式下消耗的CPU时间的比例;
- %nice 通过nice改变了进程调度优先级的进程,在用户模式下消耗的CPU时间的比例
- %system 系统模式下消耗的CPU时间的比例;
- %iowait CPU等待磁盘I/O导致空闲状态消耗的时间比例;
- %steal 利用Xen等操作系统虚拟化技术,等待其它虚拟CPU计算占用的时间比例;
- %idle CPU空闲时间比例;
查看平均负载(sar -q)
指定-q后,就能查看运行队列中的进程数、系统上的进程大小、平均负载等;与其它命令相比,它能查看各项指标随时间变化的情况;
- runq-sz:运行队列的长度(等待运行的进程数)
- plist-sz:进程列表中进程(processes)和线程(threads)的数量
- ldavg-1:最后1分钟的系统平均负载 ldavg-5:过去5分钟的系统平均负载
- ldavg-15:过去15分钟的系统平均负载
02:13:57 PM LINUX RESTART
02:20:01 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
02:30:01 PM 23 215 18.70 10.79 4.67 0
02:40:02 PM 15 204 18.32 17.53 11.33 0
02:50:01 PM 17 202 17.31 17.35 14.18 0
03:00:01 PM 5 202 17.28 17.45 15.75 0
03:10:01 PM 15 201 16.86 17.47 16.60 0
03:20:01 PM 18 201 17.40 17.73 17.32 0
03:30:01 PM 17 202 17.98 17.60 17.43 0
03:40:02 PM 18 199 16.85 17.40 17.45 0
03:50:01 PM 19 205 18.94 18.30 17.80 0
04:00:02 PM 18 204 17.58 17.65 17.68 0
04:10:02 PM 19 208 18.68 18.29 18.00 1
04:20:01 PM 19 200 17.22 18.03 18.09 0
04:30:02 PM 21 211 18.28 17.87 17.96 0
04:40:01 PM 16 205 17.54 18.13 18.17 0
04:50:02 PM 17 202 17.72 17.79 18.01 0
Average: 17 204 17.78 17.29 16.03 0
查看内存使用状况(sar -r)
字段注解:
- kbmemfree:这个值和free命令中的free值基本一致,所以它不包括buffer和cache的空间.
- kbmemused:这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间.
- %memused:物理内存使用率,这个值是kbmemused和内存总量(不包括swap)的一个百分比.
- kbbuffers和kbcached:这两个值就是free命令中的buffer和cache.
- kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap).
- %commit:这个值是kbcommit与内存总量(包括swap)的一个百分比.
02:13:57 PM LINUX RESTART
02:20:01 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
02:30:01 PM 449916 3430448 88.41 948 925236 3204692 53.61 1564160 727752 74388
02:40:02 PM 250496 3629868 93.54 76 642292 3434756 57.46 1918776 577624 2896
02:50:01 PM 217472 3662892 94.40 76 646180 3468536 58.03 1874572 655268 1220
03:00:01 PM 200560 3679804 94.83 76 645484 3483892 58.28 1869832 677108 1400
03:10:01 PM 232804 3647560 94.00 36 687240 3407608 57.01 1824896 690028 1812
03:20:01 PM 237268 3643096 93.89 0 658572 3502412 58.59 1764740 801092 2316
03:30:01 PM 285796 3594568 92.63 0 674780 3493840 58.45 1752620 832220 2832
03:40:02 PM 297988 3582376 92.32 0 744884 3409472 57.04 1748868 820916 1592
03:50:01 PM 193656 3686708 95.01 0 929264 3597268 60.18 1823876 1070348 3652
04:00:02 PM 168556 3711808 95.66 0 944632 3562620 59.60 1847804 1070788 856
04:10:02 PM 170684 3709680 95.60 0 964628 3529120 59.04 1829056 1059360 2620
04:20:01 PM 251432 3628932 93.52 0 911876 3475648 58.15 1772392 1034332 2792
04:30:02 PM 276664 3603700 92.87 0 929752 3433156 57.43 1746496 1030228 3652
04:40:01 PM 353412 3526952 90.89 0 848160 3414616 57.12 1687536 993700 944
04:50:02 PM 244372 3635992 93.70 0 914408 3458112 57.85 1802704 986708 620
Average: 255405 3624959 93.42 81 804493 3458383 57.86 1788555 868498 6906
查看页面交换发生状况(sar -W)
页面发生交换时,服务器的吞吐量会大幅下降;服务器状况不良时,如果怀疑因为内存不足而导致了页面交换的发生,可以使用这个命令来确认是否发生了大量的交换;
- pswpin/s:每秒系统换入的交换页面(swap page)数量
- pswpout/s:每秒系统换出的交换页面(swap page)数量
02:13:57 PM LINUX RESTART
02:20:01 PM pswpin/s pswpout/s
02:30:01 PM 0.00 0.00
02:40:02 PM 0.00 0.03
02:50:01 PM 0.04 0.65
03:00:01 PM 0.08 0.83
03:10:01 PM 0.09 0.20
03:20:01 PM 0.25 0.45
03:30:01 PM 0.12 0.39
03:40:02 PM 0.07 0.00
03:50:01 PM 0.24 0.84
04:00:02 PM 0.04 0.30
04:10:02 PM 0.16 0.74
04:20:01 PM 0.31 1.20
04:30:02 PM 0.08 0.84
04:40:01 PM 0.33 2.06
04:50:02 PM 0.07 0.00
Average: 0.13 0.57
要判断系统瓶颈问题,有时需几个 sar 命令选项结合起来;
- 怀疑CPU存在瓶颈,可用 sar -u 和 sar -q 等来查看
- 怀疑内存存在瓶颈,可用sar -B、sar -r 和 sar -W 等来查看
- 怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d 等来查看