Linux系统负载暴增时检查性能常用的命令
Linux服务器突然负载暴增,可通过执行以下命令,可以在几分钟内对系统资源使用情况有个大致的了解。
uptime
dmesg | tail
vmstat 1
mpstat -P ALL 1
pidstat 1
iostat -xz 1
free -m
sar -n DEV 1
sar -n TCP,ETCP 1
top
uptime
[root@nacos1 ~]# uptime
13:41:39 up 79 days, 2:23, 1 user, load average: 1.12, 0.92, 0.82
这个命令可以快速查看机器的负载情况。在Linux系统中,这些数据表示等待CPU资源的进程和阻塞在不可中断IO进程(进程状态为D)的数量。这些数据可以让我们对系统资源使用有一个宏观的了解。
命令的输出分别表示1分钟、5分钟、15分钟的平均负载情况。通过这三个数据,可以了解服务器负载是在趋于紧张还是区域缓解。如果1分钟平均负载很高,而15分钟平均负载很低,说明服务器正在命令高负载情况,需要进一步排查CPU资源都消耗在了哪里。反之,如果15分钟平均负载很高,1分钟平均负载较低,则有可能是CPU资源紧张时刻已经过去。
dmesg丨tail 或者 dmesg | head -n 20
[root@nacos1 ~]# dmesg | head -n 20
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Initializing cgroup subsys cpuacct
[ 0.000000] Linux version 3.10.0-1127.18.2.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) ) #1 SMP Sun Jul 26 15:27:06 UTC 2020
[ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-3.10.0-1127.18.2.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF-8
[ 0.000000] Disabled fast string operations
[ 0.000000] e820: BIOS-provided physical RAM map:
[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009ebff] usable
[ 0.000000] BIOS-e820: [mem 0x000000000009ec00-0x000000000009ffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000000dc000-0x00000000000fffff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000003fedffff] usable
[ 0.000000] BIOS-e820: [mem 0x000000003fee0000-0x000000003fefefff] ACPI data
[ 0.000000] BIOS-e820: [mem 0x000000003feff000-0x000000003fefffff] ACPI NVS
[ 0.000000] BIOS-e820: [mem 0x000000003ff00000-0x000000003fffffff] usable
[ 0.000000] BIOS-e820: [mem 0x00000000f0000000-0x00000000f7ffffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000fec00000-0x00000000fec0ffff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000fee00fff] reserved
[ 0.000000] BIOS-e820: [mem 0x00000000fffe0000-0x00000000ffffffff] reserved
[ 0.000000] NX (Execute Disable) protection: active
[ 0.000000] SMBIOS 2.4 present.
dmesg
命令用于显示系统开机信息,可用于诊断系统故障。
vmstat 1
[root@nacos1 ~]# vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
4 0 2076624 219992 1336 9524004 0 0 0 35 1 0 3 0 97 0 0
0 0 2076624 219604 1336 9524052 0 0 0 42 5492 7857 10 1 89 0 0
每行会输出一些系统核心指标,这些指标可以让我们更详细的了解系统状态。后面跟的参数1,表示每秒输出一次统计信息,表头提示了每一列的含义,这几介绍一些和性能调优相关的列:
- r:等待在CPU资源的进程数。这个数据比平均负载更加能够体现CPU负载情况,数据中不包含等待IO的进程。如果这个数值大于机器CPU核数,那么机器的CPU资源已经饱和。
- free:系统可用内存数(以千字节为单位),如果剩余内存不足,也会导致系统性能问题。下文介绍到的free命令,可以更详细的了解系统内存的使用情况。
- si, so:交换区写入和读取的数量。如果这个数据不为0,说明系统已经在使用交换区(swap),机器物理内存已经不足。
- us, sy, id, wa, st:这些都代表了CPU时间的消耗,它们分别表示用户时间(user)、系统(内核)时间(sys)、空闲时间(idle)、IO等待时间(wait)和被偷走的时间(stolen,一般被其他虚拟机消耗)。
上述这些CPU时间,可以让我们很快了解CPU是否出于繁忙状态。一般情况下,如果用户时间和系统时间相加非常大,CPU出于忙于执行指令。如果IO等待时间很长,那么系统的瓶颈可能在磁盘IO。
mpstat -P ALL 1
[root@nacos1 ~]# mpstat -P ALL 1
Linux 3.10.0-1160.76.1.el7.x86_64 (nacos1.com) 2022年12月07日 _x86_64_ (16 CPU)
13时51分09秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
13时51分10秒 all 0.63 0.00 0.31 0.00 0.00 0.06 0.00 0.00 0.00 99.00
13时51分10秒 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
13时51分10秒 1 2.02 0.00 1.01 0.00 0.00 0.00 0.00 0.00 0.00 96.97
13时51分10秒 2 2.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 97.00
13时51分10秒 3 0.99 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.01
13时51分10秒 4 0.99 0.00 0.99 0.00 0.00 0.00 0.00 0.00 0.00 98.02
13时51分10秒 5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
13时51分10秒 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
13时51分10秒 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
13时51分10秒 8 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00
13时51分10秒 9 0.98 0.00 0.98 0.00 0.00 0.00 0.00 0.00 0.00 98.04
13时51分10秒 10 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00
13时51分10秒 11 1.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 98.00
13时51分10秒 12 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
13时51分10秒 13 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00
13时51分10秒 14 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00
13时51分10秒 15 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00
该命令可以显示每个CPU的占用情况,如果有一个CPU占用率特别高,那么有可能是一个单线程应用程序引起的。
pidstat 1
[root@nacos1 ~]# pidstat 1
Linux 3.10.0-1160.76.1.el7.x86_64 (nacos1.com) 2022年12月07日 _x86_64_ (16 CPU)
13时51分50秒 UID PID %usr %system %guest %CPU CPU Command
13时51分51秒 1000 5430 100.00 2.97 0.00 100.00 5 java
13时51分51秒 0 5669 0.99 0.00 0.00 0.99 9 vmware_exporter
13时51分51秒 0 5865 0.99 0.99 0.00 1.98 6 cadvisor
13时51分51秒 0 7994 5.94 3.96 0.00 9.90 5 java
13时51分51秒 0 27875 0.99 0.99 0.00 1.98 2 pidstat
pidstat
命令输出进程的CPU占用率,该命令会持续输出,并且不会覆盖之前的数据,可以方便观察系统动态。
iostat -xz 1
[root@nacos1 ~]# iostat -xz 1
Linux 3.10.0-1160.76.1.el7.x86_64 (nacos1.com) 2022年12月07日 _x86_64_ (16 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
2.60 0.00 0.42 0.01 0.00 96.98
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 2.51 0.06 22.87 1.82 566.02 49.53 0.02 0.80 18.20 0.76 0.33 0.76
scd0 0.00 0.00 0.00 0.00 0.00 0.00 114.22 0.00 17.11 17.11 0.00 17.11 0.00
dm-0 0.00 0.00 0.06 25.18 1.79 565.19 44.94 0.02 0.79 18.86 0.74 0.30 0.76
dm-1 0.00 0.00 0.00 0.20 0.02 0.82 8.01 0.00 7.28 9.61 7.24 0.08 0.00
iostat
命令主要用于查看机器磁盘IO情况。该命令输出的列,主要含义是:
- r/s, w/s, rkB/s, wkB/s:分别表示每秒读写次数和每秒读写数据量(千字节)。读写量过大,可能会引起性能问题。
- await:IO操作的平均等待时间,单位是毫秒。这是应用程序在和磁盘交互时,需要消耗的时间,包括IO等待和实际操作的耗时。如果这个数值过大,可能是硬件设备遇到了瓶颈或者出现故障。
- avgqu-sz:向设备发出的请求平均数量。如果这个数值大于1,可能是硬件设备已经饱和(部分前端硬件设备支持并行写入)。
- %util:设备利用率。这个数值表示设备的繁忙程度,经验值是如果超过60,可能会影响IO性能(可以参照IO操作平均等待时间)。如果到达100%,说明硬件设备已经饱和。
如果显示的是逻辑设备的数据,那么设备利用率不代表后端实际的硬件设备已经饱和。值得注意的是,即使IO性能不理想,也不一定意味这应用程序性能会不好,可以利用诸如预读取、写缓存等策略提升应用性能。
free -m
[root@nacos1 ~]# free -m
total used free shared buff/cache available
Mem: 19914 10405 197 33 9311 8952
Swap: 4095 2028 2067
free命令可以查看系统内存的使用情况,如果可用内存非常少,系统可能会动用交换区(如果配置了的话),这样会增加IO开销(可以在iostat命令中提现),降低系统性能。
sar -n DEV 1
[root@nacos1 ~]# sar -n DEV 1
Linux 3.10.0-1160.76.1.el7.x86_64 (nacos1.com) 2022年12月07日 _x86_64_ (16 CPU)
13时54分18秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
13时54分19秒 vethe542e52 0.00 0.00 0.00 0.00 0.00 0.00 0.00
13时54分19秒 br-b3c8774ba4d8 0.00 0.00 0.00 0.00 0.00 0.00 0.00
13时54分19秒 veth25dc11b 0.00 0.00 0.00 0.00 0.00 0.00 0.00
13时54分19秒 veth4321375 0.00 0.00 0.00 0.00 0.00 0.00 0.00
13时54分19秒 br-48984e41f1e8 0.00 0.00 0.00 0.00 0.00 0.00 0.00
13时54分19秒 veth2ab05ff 0.00 0.00 0.00 0.00 0.00 0.00 0.00
13时54分19秒 ens192 273.00 178.00 40.89 15.06 0.00 0.00 0.00
13时54分19秒 br-b8cc0caf0f1c 179.00 262.00 12.65 40.22 0.00 0.00 0.00
13时54分19秒 veth0b7d9aa 0.00 0.00 0.00 0.00 0.00 0.00 0.00
13时54分19秒 vethafc2f17 0.00 0.00 0.00 0.00 0.00 0.00 0.00
13时54分19秒 veth2847aab 0.00 0.00 0.00 0.00 0.00 0.00 0.00
13时54分19秒 br-b08c5c456fe3 0.00 0.00 0.00 0.00 0.00 0.00 0.00
13时54分19秒 br-9b9bee6ce98a 0.00 0.00 0.00 0.00 0.00 0.00 0.00
13时54分19秒 veth6a60e4a 0.00 0.00 0.00 0.00 0.00 0.00 0.00
13时54分19秒 veth4813ed4 0.00 0.00 0.00 0.00 0.00 0.00 0.00
13时54分19秒 vethabcc2f6 0.00 0.00 0.00 0.00 0.00 0.00 0.00
13时54分19秒 veth343dbba 0.00 0.00 0.00 0.00 0.00 0.00 0.00
13时54分19秒 veth562045f 239.00 290.00 1734.11 42.02 0.00 0.00 0.00
13时54分19秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
13时54分19秒 vethefd4693 0.00 0.00 0.00 0.00 0.00 0.00 0.00
13时54分19秒 vethec916cb 0.00 0.00 0.00 0.00 0.00 0.00 0.00
13时54分19秒 veth6931d12 28.00 60.00 1.80 1719.01 0.00 0.00 0.00
13时54分19秒 br-14ba3e1b2440 0.00 0.00 0.00 0.00 0.00 0.00 0.00
13时54分19秒 veth66a7ab7 0.00 0.00 0.00 0.00 0.00 0.00 0.00
13时54分19秒 vethf842758 0.00 0.00 0.00 0.00 0.00 0.00 0.00
13时54分19秒 vethab3a82b 0.00 0.00 0.00 0.00 0.00 0.00 0.00
13时54分19秒 docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
平均时间: vethe542e52 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: br-b3c8774ba4d8 46.23 44.22 2.98 4.00 0.00 0.00 0.00
平均时间: veth25dc11b 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: veth4321375 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: br-48984e41f1e8 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: veth2ab05ff 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: ens192 308.04 220.10 41.91 19.75 0.00 0.00 0.00
平均时间: br-b8cc0caf0f1c 171.86 253.27 12.19 37.18 0.00 0.00 0.00
平均时间: veth0b7d9aa 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: vethafc2f17 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: veth2847aab 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: br-b08c5c456fe3 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: br-9b9bee6ce98a 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: veth6a60e4a 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: veth4813ed4 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: vethabcc2f6 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: veth343dbba 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: veth562045f 215.08 285.43 879.21 454.55 0.00 0.00 0.00
平均时间: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: vethefd4693 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: vethec916cb 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: veth6931d12 32.16 43.22 417.37 864.67 0.00 0.00 0.00
平均时间: br-14ba3e1b2440 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: veth66a7ab7 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: vethf842758 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均时间: vethab3a82b 46.23 44.22 3.62 4.00 0.00 0.00 0.00
平均时间: docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sar命令在这里可以查看网络设备的吞吐率。在排查性能问题时,可以通过网络设备的吞吐量,判断网络设备是否已经饱和。
sar -n TCP,ETCP 1
[root@nacos1 ~]# sar -n TCP,ETCP 1
Linux 3.10.0-1160.76.1.el7.x86_64 (nacos1.com) 2022年12月07日 _x86_64_ (16 CPU)
13时55分18秒 active/s passive/s iseg/s oseg/s
13时55分19秒 0.00 0.00 1.00 0.00
13时55分18秒 atmptf/s estres/s retrans/s isegerr/s orsts/s
13时55分19秒 0.00 0.00 0.00 0.00 0.00
13时55分19秒 active/s passive/s iseg/s oseg/s
13时55分20秒 0.00 0.00 1.00 1.00
13时55分19秒 atmptf/s estres/s retrans/s isegerr/s orsts/s
13时55分20秒 0.00 0.00 0.00 0.00 0.00
13时55分20秒 active/s passive/s iseg/s oseg/s
13时55分21秒 0.00 0.00 1.00 1.00
13时55分20秒 atmptf/s estres/s retrans/s isegerr/s orsts/s
13时55分21秒 0.00 0.00 0.00 0.00 0.00
13时55分21秒 active/s passive/s iseg/s oseg/s
13时55分21秒 0.00 0.00 9.62 11.54
13时55分21秒 atmptf/s estres/s retrans/s isegerr/s orsts/s
13时55分21秒 0.00 0.00 0.00 0.00 0.00
平均时间: active/s passive/s iseg/s oseg/s
平均时间: 0.00 0.00 2.27 2.27
平均时间: atmptf/s estres/s retrans/s isegerr/s orsts/s
平均时间: 0.00 0.00 0.00 0.00 0.00
TCP连接数可以用来判断性能问题是否由于建立了过多的连接,进一步可以判断是主动发起的连接,还是被动接受的连接。TCP重传可能是因为网络环境恶劣,或者服务器压力过大导致丢包。
top
top命令包含了前面好几个命令的检查的内容。比如系统负载情况(uptime)、系统内存使用情况(free)、系统CPU使用情况(vmstat)等。因此通过这个命令,可以相对全面的查看系统负载的来源。