Linux 60秒快速性能分析操作手册
本文章来自于:Cloud研习社
Linux 60秒快速性能分析操作手册
Linux 60秒快速性能分析操作手册
写在前面
- 博文内容涉及 Linux 60秒快速性能分析命令的简单说明以及指标解释:
uptime
dmesg | tail && cat /var/log/messages
vmstat 1
mpstat -P ALL 1
pidstat 1
iostat -xz 1
free -m
sar -n DEV 1
sar -n tcp,ETCP 1
sar -n SOCK 1 3
top
- 理解不足小伙伴帮忙指正
Linux 60秒分析
下面这个清单适用于任何性能问题的分析工作,也反映了笔者在实际工作中,当登录到一台表现不佳的 Linux 系统中后,在最初60秒内通常会进行的操作。
uptime
dmesg | tail && cat /var/log/messages
vmstat 1
mpstat -P ALL 1
pidstat 1
iostat -xz 1
free -m
sar -n DEV 1
sar -n tcp,ETCP 1
sar -n SOCK 1 3
top
uptime
uptime
命令用于显示系统已运行的时间,并提供系统负载平均值的信息。以下是 uptime
命令提供的信息解释:
[root@VM-8-12-centos ~]# uptime
21:17:48 up 14 days, 7:56, 2 users, load average: 0.00, 0.08, 0.13
uptime 可以快速查看当前系统时间
以及运行时间
,总的登录用户
, 以及平均负载
:
- 当前时间:显示执行uptime命令时的系统当前时间。
- 系统运行时间:显示系统自上次引导或重新启动以来的运行时间。以"X天X小时X分钟"的格式显示。
- 用户数量:表示当前登录到系统的用户数量。
- 系统负载平均值:显示过去1分钟、5分钟和15分钟的系统负载平均值。负载平均值代表处于运行状态或等待运行状态的平均进程数量。它指示系统的活动水平和资源利用程度。负载平均值并不针对系统中的CPU核数进行归一化;
[root@VM-8-12-centos ~]# uptime
21:17:48 up 14 days, 7:56, 2 users, load average: 0.00, 0.08, 0.13
这里主要关注最后面的三组数字 平均负载
:
在Linux 系统中,这些数字包含了想要在 CPU 上运行的进程
,同时也包含了阻塞在不可中断IO(通常是磁盘 I/O)上的进程
。这给出了一个高层次视角的资源负载(或者说资源需求)
。
3个数字
分别是指数衰减的1分钟/5分钟/15分钟滑动窗累积值
。通过这3个值可以大致了解负载随时间变化的情况
。
top
快速查看CPU核数可以通过top
命令然后按1
键查看
top - 21:21:31 up 14 days, 8:00, 2 users, load average: 0.13, 0.11, 0.13
Tasks: 242 total, 1 running, 229 sleeping, 0 stopped, 12 zombie
%Cpu0 : 1.3/0.0 1[| ]
top - 21:21:36 up 14 days, 8:00, 2 users, load average: 0.12, 0.10, 0.13
Tasks: 242 total, 2 running, 228 sleeping, 0 stopped, 12 zombie
%Cpu0 : 1.4 us, 1.4 sy, 0.0 ni, 97.1 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 1.4 us, 1.4 sy, 0.0 ni, 97.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 7911464 total, 1168780 free, 3361476 used, 3381208 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 4215292 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
728 root 20 0 3033200 431940 7708 S 2.9 5.5 4:10.46 java
14938 root 20 0 1268512 26660 6740 S 1.4 0.3 18:30.86 containerd
32622 root 20 0 1962964 506412 20972 S 1.4 6.4 23:35.43 java
1 root 20 0 191460 4160 2384 S 0.0 0.1 5:31.41 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.22 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:39.48 ksoftirqd/0
7 root rt 0 0 0 0 S 0.0 0.0 0:08.57 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 6:49.52 rcu_sched
上面的例子显示负载最近有大幅的提升。一般情况下(还受到其他因素的影响,I/O 操作等
),负载数与系统 CPU 核数
的关系可以用以下规则来理解:
在top
命令然后按1
键的基础上可以按 t
键对数据进行可视化展示
top - 21:21:36 up 14 days, 8:00, 2 users, load average: 0.12, 0.10, 0.13
Tasks: 242 total, 2 running, 228 sleeping, 0 stopped, 12 zombie
top - 21:22:44 up 14 days, 8:01, 2 users, load average: 0.07, 0.10, 0.13
top - 21:22:53 up 14 days, 8:01, 2 users, load average: 0.06, 0.09, 0.13
Tasks: 242 total, 2 running, 228 sleeping, 0 stopped, 12 zombie
%Cpu0 : 0.9/0.0 1[| ]
%Cpu1 : 0.9/0.0 1[| ]
KiB Mem : 7911464 total, 1130988 free, 3374608 used, 3405868 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 4202160 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
728 root 20 0 3033200 431940 7708 S 0.9 5.5 4:11.11 java
7421 root 20 0 757312 17876 2628 S 0.9 0.2 111:22.01 barad_agent
12697 root 20 0 164296 2420 1616 R 0.9 0.0 0:00.01 top
15885 root 20 0 1064868 109136 12184 S 0.9 1.4 153:50.09 YDService
32312 root 20 0 110772 36152 4936 S 0.9 0.5 0:05.06 vocechat-server
32622 root 20 0 1962964 510232 20972 S 0.9 6.4 23:40.85 java
1 root 20 0 191460 4160 2384 S 0.0 0.1 5:31.43 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.22 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:39.48 ksoftirqd/0
7 root rt 0 0 0 0 S 0.0 0.0 0:08.57 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 6:49.53 rcu_sched
- 如果负载数
小于 CPU 核数的70-80%
:这通常表示系统的负载较轻,有足够的处理能力来处理所有的任务。系统响应时间较短,性能较好。 - 如果负载数
接近或超过 CPU 核数的100%
:这表示系统的负载很高,正在接近或达到其处理能力的极限。系统可能会出现延迟或变慢的情况,响应时间变长。 - 如果负载数
远远超过 CPU 核数的100%
:这表示系统的负载非常高
,超过了系统的处理能力。系统可能会出现严重的延迟,甚至崩溃或无法响应。
负载的平均值
值得在排障过程中被首先进行检查,以确认性能问题是否还存在。在一个容错的环境中,一台存在性能问题的服务器,在你登录到机器上时,也许已经自动从服务列表中下线了。
一个较高的 15分钟负载
与一个较低的1分钟负载
同时出现,可能意味着已经错过了问题发生的现场。
┌──[root@vms100.liruilongs.github.io]-[~]
└─$uptime
11:33:45 up 35 min, 1 user, load average: 1.39, 6.06, 11.64
┌──[root@vms100.liruilongs.github.io]-[~]
└─$
dmesg
dmesg | tail
或者 cat /var/log/messages
或者 journalctl -k | tail
也可以结合 cat /var/log/messages
来排查
[root@VM-8-12-centos ~]# dmesg | tail
[1220957.271974] device vethbb7e7bb entered promiscuous mode
[1220957.281145] IPv6: ADDRCONF(NETDEV_UP): vethbb7e7bb: link is not ready
[1220957.281154] docker0: port 1(vethbb7e7bb) entered blocking state
[1220957.281157] docker0: port 1(vethbb7e7bb) entered forwarding state
[1220957.282057] docker0: port 1(vethbb7e7bb) entered disabled state
[1220957.397156] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[1220957.397356] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[1220957.397365] IPv6: ADDRCONF(NETDEV_CHANGE): vethbb7e7bb: link becomes ready
[1220957.397401] docker0: port 1(vethbb7e7bb) entered blocking state
[1220957.397403] docker0: port 1(vethbb7e7bb) entered forwarding state
这个命令显示过去 10 条系统日志,如果有的话。注意在这里寻找可能导致性能问题的错误
。 添加 T和t
可以展示对应的时间
[root@VM-8-12-centos ~]# dmesg -T| tail
[Thu Mar 14 16:30:28 2024] device vethbb7e7bb entered promiscuous mode
[Thu Mar 14 16:30:28 2024] IPv6: ADDRCONF(NETDEV_UP): vethbb7e7bb: link is not ready
[Thu Mar 14 16:30:28 2024] docker0: port 1(vethbb7e7bb) entered blocking state
[Thu Mar 14 16:30:28 2024] docker0: port 1(vethbb7e7bb) entered forwarding state
[Thu Mar 14 16:30:28 2024] docker0: port 1(vethbb7e7bb) entered disabled state
[Thu Mar 14 16:30:28 2024] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[Thu Mar 14 16:30:28 2024] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[Thu Mar 14 16:30:28 2024] IPv6: ADDRCONF(NETDEV_CHANGE): vethbb7e7bb: link becomes ready
[Thu Mar 14 16:30:28 2024] docker0: port 1(vethbb7e7bb) entered blocking state
[Thu Mar 14 16:30:28 2024] docker0: port 1(vethbb7e7bb) entered forwarding state
在日常维护中,往往结合 grep
快速定位问题
[root@VM-8-12-centos ~]# dmesg -T | grep -i error
[Thu Feb 29 13:21:12 2024] BERT: Boot Error Record Table support is disabled. Enable it by using bert_enable as kernel parameter.
[Thu Feb 29 15:37:25 2024] traps: node[11227] trap int3 ip:1c04062 sp:7ffed91ebac0 error:0 in node[400000+4531000]
比如 内存不足引发
OOM和TCP 的丢弃`请求的记录。
[root@VM-8-12-centos ~]# cat /var/log/messages | grep -i memory
Feb 29 13:21:13 VM-8-12-centos kernel: Reserving 256MB of memory at 592MB for crashkernel (System RAM: 8191MB)
Feb 29 13:21:13 VM-8-12-centos kernel: Early memory node ranges
Feb 29 13:21:13 VM-8-12-centos kernel: PM: Registered nosave memory: [mem 0x0009f000-0x0009ffff]
Feb 29 13:21:13 VM-8-12-centos kernel: PM: Registered nosave memory: [mem 0x000a0000-0x000effff]
Feb 29 13:21:13 VM-8-12-centos kernel: PM: Registered nosave memory: [mem 0x000f0000-0x000fffff]
Feb 29 13:21:13 VM-8-12-centos kernel: PM: Registered nosave memory: [mem 0xbffde000-0xbfffffff]
Feb 29 13:21:13 VM-8-12-centos kernel: PM: Registered nosave memory: [mem 0xc0000000-0xfeffbfff]
Feb 29 13:21:13 VM-8-12-centos kernel: PM: Registered nosave memory: [mem 0xfeffc000-0xfeffffff]
Feb 29 13:21:13 VM-8-12-centos kernel: PM: Registered nosave memory: [mem 0xff000000-0xfffbffff]
Feb 29 13:21:13 VM-8-12-centos kernel: PM: Registered nosave memory: [mem 0xfffc0000-0xffffffff]
Feb 29 13:21:13 VM-8-12-centos kernel: Memory: 4895468k/9437184k available (7988k kernel code, 1049104k absent, 498624k reserved, 5756k data, 2176k init)
Feb 29 13:21:13 VM-8-12-centos kernel: please try 'cgroup_disable=memory' option if you don't want memory cgroups
Feb 29 13:21:13 VM-8-12-centos kernel: Initializing cgroup subsys memory
Feb 29 13:21:13 VM-8-12-centos kernel: x86/mm: Memory block size: 128MB
Feb 29 13:21:13 VM-8-12-centos kernel: Freeing initrd memory: 19088k freed
Feb 29 13:21:13 VM-8-12-centos kernel: Non-volatile memory driver v1.3
Feb 29 13:21:13 VM-8-12-centos kernel: crash memory driver: version 1.1
TCP 的相关日志甚至指引了我们下一步的分析方向:查看SNMP 计数器值。
vmstat 1
[root@VM-8-12-centos ~]# man vmstat
VMSTAT(8) System Administration VMSTAT(8)
NAME
vmstat - Report virtual memory statistics
SYNOPSIS
vmstat [options] [delay [count]]
DESCRIPTION
vmstat reports information about processes, memory, paging, block IO, traps, disks and cpu activity.
The first report produced gives averages since the last reboot. Additional reports give information
on a sampling period of length delay. The process and memory reports are instantaneous in either
case.
[root@VM-8-12-centos ~]# 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
1 0 0 1151472 178672 3215464 0 0 5 250 4 9 2 1 97 0 0
0 0 0 1151496 178672 3215496 0 0 0 0 2044 3955 1 1 99 0 0
0 0 0 1151012 178672 3215496 0 0 0 0 2100 3979 1 1 98 0 0
0 0 0 1151340 178672 3215504 0 0 0 76 2548 4685 2 2 96 0 0
需要检查的列包括如下几个:
r
:CPU上正在执行的和等待执行
的进程数量。相比平均负载
来说,这是一个更好的排查CPU饱和度
的指标,因为它不包含IO。可以这样解释:一个比CPU数量多的 r 值代表 CPU 资源处于饱和状态
。free
:空闲内存,单位是KB。如果数字位数一眼数不过来,那么内存应该是够用的
。使用free -m
命令,可以更好地解释空闲内存。si 和so
:页换入和页换出。如果这些值不是零,那么意味着系统内存紧张
。这个值只有在配置开启了交换分区
后才会起作用。us、sy、id、wa和st
:这些都是 CPU运行时间的进一步细分,是对所有的CPU 取平均之后的结果。它们分别代表用户态时间
、系统态时间(内核)
、空闲率
、等待I/O
,以及被窃取时间
(stolen time,指的是虚拟化环境下,被其他客户机所挤占的时间;或者是Xen 环境下客户机自身隔离的驱动域运行时间)。
上面的例子显示了CPU时间主要花在系统态
上。这指引我们下一步将主要针对系统态代码进行剖析
。
[root@VM-8-12-centos ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 0 0 1144000 178740 3222008 0 0 5 250 4 9 2 1 97 0 0
查看CPU平均值,当前系统中,可运行进程为2(r),被阻塞的进程为0(b),系统发生中断次数1501(in),系统发生上下文切换次数为595(cs),系统代码消耗CPU为4%(sy),用户代码消耗CPU为8%(us),系统空闲占比87%(id),剩余1%属于等待IO消耗的CPU空闲状态(wa)
[root@VM-8-12-centos ~]# vmstat -s
7911464 K total memory
3370540 K used memory
4048560 K active memory
2269588 K inactive memory
1140124 K free memory
178780 K buffer memory
3222020 K swap cache
0 K total swap
0 K used swap
0 K free swap
5722024 non-nice user cpu ticks
420 nice user cpu ticks
1872292 system cpu ticks
238589800 idle cpu ticks
372680 IO-wait cpu ticks
0 IRQ cpu ticks
20709 softirq cpu ticks
0 stolen cpu ticks
11346340 pages paged in
616133168 pages paged out
0 pages swapped in
0 pages swapped out
2156996424 interrupts
4017773927 CPU context switches
1709184072 boot time
8942022 forks
这里的ticks为一个时间单位,相关数据为自系统启动时间以来的数据。forks表示系统创建以来的进程数,CPU context switches表示上下文文切换次数,interrupts即中断次数,剩下的参数对应上面的列理解即可,stolen cpu 这个不太理解;
mpstat -P ALL l
需要装包
[root@VM-8-12-centos ~]# yum install -y sysstat
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
这个命令将每个CPU分解到各个状态下的时间
打印出来。
[root@VM-8-12-centos ~]# mpstat -P ALL 1
Linux 3.10.0-1160.105.1.el7.x86_64 (VM-8-12-centos) 03/14/2024 _x86_64_ (2 CPU)
09:31:52 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
09:31:53 PM all 0.51 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.49
09:31:53 PM 0 1.01 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 98.99
09:31:53 PM 1 1.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 98.00
09:31:53 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
09:31:54 PM all 1.50 0.00 0.50 1.00 0.00 0.00 0.00 0.00 0.00 97.00
09:31:54 PM 0 1.01 0.00 0.00 1.01 0.00 0.00 0.00 0.00 0.00 97.98
09:31:54 PM 1 2.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 97.00
对于比较高的 %iowait(等待I/O操作完成占用CPU的百分比,表示CPU时间用于等待I/O操作完成的百分比。)
时间也要注意,可以使用磁盘 I/O工具
进一步分析
如果出现较高的 %sys
值(系统态占用),可以使用系统调用(syscall)跟踪和内核跟踪
,以及CPU剖析等手段进一步分析。
[root@VM-8-12-centos ~]# mpstat -P ALL 1
Linux 3.10.0-1160.105.1.el7.x86_64 (VM-8-12-centos) 03/14/2024 _x86_64_ (2 CPU)
09:31:52 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
09:31:53 PM all 0.51 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.49
09:31:53 PM 0 1.01 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 98.99
09:31:53 PM 1 1.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 98.00
09:31:53 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
09:31:54 PM all 1.50 0.00 0.50 1.00 0.00 0.00 0.00 0.00 0.00 97.00
09:31:54 PM 0 1.01 0.00 0.00 1.01 0.00 0.00 0.00 0.00 0.00 97.98
09:31:54 PM 1 2.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 97.00
09:31:54 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
09:31:55 PM all 2.01 0.00 1.51 0.00 0.00 0.00 0.00 0.00 0.00 96.48
09:31:55 PM 0 2.02 0.00 2.02 0.00 0.00 0.00 0.00 0.00 0.00 95.96
09:31:55 PM 1 1.02 0.00 1.02 0.00 0.00 0.00 0.00 0.00 0.00 97.96
%idle
指CPU的空闲率
,通过检查单个热点(繁忙)CPU
,挑出一个可能的线程扩展性
问题;
上面的输出暴露了一个问题:CPU0
的用户态的占比高达 100%
,这是单个线程遇到瓶颈
的特征。
pidstat 1
pidstat(1)
命令按每个进程展示 CPU的使用情况(包括用户态
和系统态
时间的分解)。top(l)命令虽然也很流行,但是pidstat(1)默认支持滚动打印输出,这样可以采集到不同时间段的数据变化。
[root@VM-8-12-centos ~]# pidstat 3
Linux 3.10.0-1160.105.1.el7.x86_64 (VM-8-12-centos) 03/14/2024 _x86_64_ (2 CPU)
09:34:25 PM UID PID %usr %system %guest %CPU CPU Command
09:34:28 PM 0 728 0.33 0.33 0.00 0.66 1 java
09:34:28 PM 998 1602 0.33 0.00 0.00 0.33 0 java
09:34:28 PM 0 7421 0.66 0.00 0.00 0.66 1 barad_agent
09:34:28 PM 0 14938 0.33 0.00 0.00 0.33 0 containerd
09:34:28 PM 0 15885 0.33 0.33 0.00 0.66 0 YDService
09:34:28 PM 0 30822 0.33 0.00 0.00 0.33 0 dockerd
09:34:28 PM 0 31511 0.33 0.00 0.00 0.33 1 containerd-shim
09:34:28 PM 0 32440 0.33 0.00 0.00 0.33 1 containerd-shim
09:34:28 PM 0 32622 0.66 0.00 0.00 0.66 0 java
Average: UID PID %usr %system %guest %CPU CPU Command
Average: 0 9 0.00 0.11 0.00 0.11 - rcu_sched
Average: 101 386 0.11 0.00 0.00 0.11 - lua
Average: 0 728 0.56 0.22 0.00 0.78 - java
Average: 999 1474 0.11 0.00 0.00 0.11 - java
Average: 998 1602 0.11 0.00 0.00 0.11 - java
Average: 0 7421 0.33 0.11 0.00 0.44 - barad_agent
Average: 0 15885 0.44 0.22 0.00 0.67 - YDService
Average: 0 18574 0.00 0.22 0.00 0.22 - pidstat
Average: 0 30822 0.11 0.11 0.00 0.22 - dockerd
Average: 0 31829 0.11 0.00 0.00 0.11 - synctv
Average: 0 32058 0.11 0.00 0.00 0.11 - containerd-shim
Average: 0 32199 0.11 0.00 0.00 0.11 - containerd-shim
Average: 999 32456 0.11 0.11 0.00 0.22 - mysqld
Average: 0 32622 0.78 0.00 0.00 0.78 - java
这个输出显示了一个Java 进程每秒使用的CPU 资源在变化:这个百分比是对全部CPU相加的和因此500%相当于5个100%运行的CPU
。
iostat -xz
[root@VM-8-12-centos ~]# iostat -xz
Linux 3.10.0-1160.105.1.el7.x86_64 (VM-8-12-centos) 03/14/2024 _x86_64_ (2 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
2.32 0.00 0.77 0.15 0.00 96.76
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 12.11 0.22 9.80 9.03 497.39 101.09 0.03 2.89 3.54 2.87 0.44 0.45
scd0 0.00 0.00 0.00 0.00 0.19 0.00 108.44 0.00 0.71 0.71 0.00 0.39 0.00
这个工具显示了存储设备的IO 指标
。要检查的列包括如下几个。
r/s、w/s、rkB/s
和wkB/s
:这些是每秒向设备发送的读、写次数
,以及读、写字节数
。可以用这些指标对业务负载画像
。某些性能问题仅仅是因为超过了能够承受的最大负载
导致的。await
:I/O 的平均响应时间
,以毫秒为单位。这是应用需要承受的时间,它同时包含了I/O 队列时间和服务时间
。超过预期的平均响应时间
,可看作设备已饱和或者设备层面有问题
的表征。aqu-sz\avgqu-sz
:设备请求队列的平均长度。比1大的值有可能是发生饱和的表征
(不过对有些设备,尤其是对基于多块磁盘的虚拟设备来说,通常以并行方式处理请求)。%util
:设备使用率。这是设备繁忙程度的百分比
,显示了每秒设备开展实际工作的时间占比。不过它展示的并不是容量规划意义下的使用率,因为设备可以并行处理请求。大于60%的值通常会导致性能变差(可以通过await(完成对一个请求的服务所需的平均时间(按毫秒计),该平均时间为请求在磁盘队列中等待的时间加上磁盘对其服务所需的时间) 字段确认)
,不过这也取决于具体设备。接近 100% 的值通常代表了设备达到饱和状态
。
iostat的扩展磁盘统计信息:
统计数据 | 说明 |
---|---|
rrqm/s | 在提交给磁盘前,被合并的读请求的数量 |
wrqm/s | 在提交给磁盘前,被合并的写请求的数量 |
r/s | 每秒提交给磁盘的读请求数量 |
w/s | 每秒提交给磁盘的写请求数量 |
rsec/s | 每秒读取的磁盘扇区数 |
wsec/s | 每秒写入的磁盘扇区数 |
rkB/s | 每秒从磁盘读取了多少KB的数据 |
wkB/s | 每秒向磁盘写入了多少KB的数据 |
avgrq-sz | 磁盘请求的平均大小(按扇区计) |
avgqu-sz | 磁盘请求队列的平均大小。 |
await | 完成对一个请求的服务所需的平均时间(按毫秒计),该平均时间为请求在磁盘队列中等待的时间加上磁盘对其服务所需的时间 |
svctm | 提交到磁盘的请求的平均服务时间(按毫秒计)。该项表明磁盘完成一个请求所花费的平均时间。与await不同,该项不包含在队列中等待的时间 |
%util | 利用率 |
当avgqu-sz的值特别大的时候,且请求等待时间
await远远高于请求服务
svctm所花费时间,且利用率%util为100%的时候,表明该磁盘处于饱和状态。
这有时会引起困惑,比如当
iostat(1)
报告说某个设备已经达到100%
的使用率后,还能够接受更高的负载。它只是报告某个设备在一段时间内100%
繁忙,并没有说设备的使用率达到100%
了:此时也许仍然可以接受更高的负载。在一个卷后面有多个磁盘设备支撑的情况下由于可以并行处理请求,iostat(1)
中的%util
这个指标就更加具有迷惑性。
free -m
[root@VM-8-12-centos ~]# free -m
total used free shared buff/cache available
Mem: 7726 3295 1045 19 3385 4104
Swap: 0 0 0
这个输出显示了用兆字节(MB)作为单位的可用内存。检查可用内存(available)是否接近0
;这个值显示了在系统中还有多少实际剩余内存可用,包括缓冲区和页缓存区
。将一些内存用于缓存可以提升文件系统的性能。可以根据不同的参数更换单位
[root@VM-8-12-centos ~]# free -g
total used free shared buff/cache available
Mem: 7 3 1 0 3 4
Swap: 0 0 0
sar -n DEV 1
显示每个设备发送和接收的数据包数和字节数信息
[root@VM-8-12-centos ~]# sar -n DEV 1
Linux 3.10.0-1160.105.1.el7.x86_64 (VM-8-12-centos) 03/14/2024 _x86_64_ (2 CPU)
09:40:50 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
09:40:51 PM br-8e96f472d63a 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:40:51 PM vethb35c080 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:40:51 PM br-745cab30a82f 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:40:51 PM veth9aad779 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:40:51 PM veth145b211 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:40:51 PM veth97fdc35 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:40:51 PM br-4ac4484e16d0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:40:51 PM br-d6af671fae4e 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:40:51 PM veth23e5fd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:40:51 PM veth1630264 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:40:51 PM veth87a1952 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:40:51 PM vethbb7e7bb 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:40:51 PM br-8b097825aeee 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:40:51 PM veth51f5ed2 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:40:51 PM br-82de740c09d4 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:40:51 PM eth0 6.56 6.56 0.53 0.76 0.00 0.00 0.00
09:40:51 PM br-0103fd6dc560 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:40:51 PM br-095f47fd6798 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:40:51 PM veth25e78c8 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:40:51 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:40:51 PM br-48856861e2a5 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:40:51 PM veth6bb4a73 1.64 1.64 0.07 0.07 0.00 0.00 0.00
09:40:51 PM veth5c59068 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:40:51 PM br-3ea67388424b 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:40:51 PM vethc6bacaf 1.64 1.64 0.07 0.07 0.00 0.00 0.00
09:40:51 PM veth9457ab4 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:40:51 PM vethf239d24 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:40:51 PM br-9bd2074058a5 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:40:51 PM veth469e992 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:40:51 PM veth4a47599 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:40:51 PM br-ca19630b977a 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:40:51 PM docker0 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
Average: br-8e96f472d63a 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: vethb35c080 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: br-745cab30a82f 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: veth9aad779 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: veth145b211 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: veth97fdc35 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: br-4ac4484e16d0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: br-d6af671fae4e 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: veth23e5fd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: veth1630264 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: veth87a1952 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: vethbb7e7bb 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: br-8b097825aeee 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: veth51f5ed2 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: br-82de740c09d4 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: eth0 6.56 6.56 0.53 0.76 0.00 0.00 0.00
Average: br-0103fd6dc560 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: br-095f47fd6798 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: veth25e78c8 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: br-48856861e2a5 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: veth6bb4a73 1.64 1.64 0.07 0.07 0.00 0.00 0.00
Average: veth5c59068 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: br-3ea67388424b 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: vethc6bacaf 1.64 1.64 0.07 0.07 0.00 0.00 0.00
Average: veth9457ab4 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: vethf239d24 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: br-9bd2074058a5 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: veth469e992 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: veth4a47599 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: br-ca19630b977a 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
列 | 说明 |
---|---|
rxpck/s | 数据包接收速率 |
txpck/s | 数据包发送速率 |
rxkB/s | kb接收速率 |
txkB/s | kb发送速率 |
rxcmp/s | 压缩包接收速率 |
txcmp/s | 压缩包发送速率 |
rxmcst/s | 多播包接收速率 |
显示每个设备的发送和接收错误信息
[root@VM-8-12-centos ~]# sar -n EDEV 1 1
Linux 3.10.0-1160.105.1.el7.x86_64 (VM-8-12-centos) 03/14/2024 _x86_64_ (2 CPU)
09:42:01 PM IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s
09:42:02 PM br-8e96f472d63a 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM vethb35c080 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM br-745cab30a82f 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM veth9aad779 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM veth145b211 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM veth97fdc35 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM br-4ac4484e16d0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM br-d6af671fae4e 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM veth23e5fd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM veth1630264 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM veth87a1952 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM vethbb7e7bb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM br-8b097825aeee 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM veth51f5ed2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM br-82de740c09d4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM br-0103fd6dc560 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM br-095f47fd6798 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM veth25e78c8 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM br-48856861e2a5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM veth6bb4a73 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM veth5c59068 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM br-3ea67388424b 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM vethc6bacaf 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM veth9457ab4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM vethf239d24 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM br-9bd2074058a5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM veth469e992 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM veth4a47599 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM br-ca19630b977a 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
09:42:02 PM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: IFACE rxerr/s txerr/s coll/s rxdrop/s txdrop/s txcarr/s rxfram/s rxfifo/s txfifo/s
Average: br-8e96f472d63a 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: vethb35c080 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: br-745cab30a82f 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: veth9aad779 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: veth145b211 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: veth97fdc35 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: br-4ac4484e16d0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: br-d6af671fae4e 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: veth23e5fd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: veth1630264 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: veth87a1952 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: vethbb7e7bb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: br-8b097825aeee 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: veth51f5ed2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: br-82de740c09d4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: br-0103fd6dc560 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: br-095f47fd6798 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: veth25e78c8 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: br-48856861e2a5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: veth6bb4a73 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: veth5c59068 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: br-3ea67388424b 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: vethc6bacaf 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: veth9457ab4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: vethf239d24 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: br-9bd2074058a5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: veth469e992 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: veth4a47599 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: br-ca19630b977a 0.00 0.00 0.00 0.00 0.00 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 0.00
列 | 说明 |
---|---|
rxerr/s | 接收错误率 |
txerr/s | 发送错误率 |
co11/s | 发送时的以太网冲突率 |
rxdrop/s | 由于Linux内核缓冲区不足而导致的接收帧丢弃率 |
txdrop/s | 由于Linux内核缓冲区不足而导致的发送帧丢弃率 |
txcarr/s | 由于载波错误而导致的发送帧丢弃率 |
rxfram/s | 由于帧对齐错误而导致的接收帧丢弃率 |
rxfifo/s | 由于FIFO错误而导致的接收帧丢弃率 |
txfifo/s | 由于FIFO错误而导致的发送帧丢弃率 |
显示使用套接字(TCP、UDP和RAW)的总数信息
[root@VM-8-12-centos ~]# sar -n SOCK 1 3
Linux 3.10.0-1160.105.1.el7.x86_64 (VM-8-12-centos) 03/14/2024 _x86_64_ (2 CPU)
09:43:48 PM totsck tcpsck udpsck rawsck ip-frag tcp-tw
09:43:49 PM 872 25 4 0 0 32
09:43:50 PM 872 25 4 0 0 32
09:43:51 PM 872 25 4 0 0 32
Average: 872 25 4 0 0 32
列 | 说明 |
---|---|
totsck | 当前正在被使用的套接字总数 |
tcpsck | 当前正在被使用的TCP套接字总数 |
udpsck | 当前正在被使用的UDP套接字总数 |
rawsck | 当前正在被使用的RAW套接字总数 |
ip-frag | IP分片的总数 |
sar -n TCP,ETCP 1
[root@VM-8-12-centos ~]# sar -n TCP,ETCP 1
Linux 3.10.0-1160.105.1.el7.x86_64 (VM-8-12-centos) 03/14/2024 _x86_64_ (2 CPU)
09:45:48 PM active/s passive/s iseg/s oseg/s
09:45:49 PM 0.00 0.00 2.00 0.00
09:45:48 PM atmptf/s estres/s retrans/s isegerr/s orsts/s
09:45:49 PM 0.00 0.00 0.00 0.00 0.00
09:45:49 PM active/s passive/s iseg/s oseg/s
09:45:50 PM 0.00 0.00 1.00 1.00
09:45:49 PM atmptf/s estres/s retrans/s isegerr/s orsts/s
09:45:50 PM 0.00 0.00 0.00 0.00 0.00
09:45:50 PM active/s passive/s iseg/s oseg/s
09:45:51 PM 0.00 0.00 1.00 1.00
Average: active/s passive/s iseg/s oseg/s
Average: 0.46 0.00 5.02 5.02
Average: atmptf/s estres/s retrans/s isegerr/s orsts/s
Average: 0.00 0.00 0.00 0.00 0.00
使用sar(1)
工具来查看 TCP 指标和TCP 错误信息
。相关的字段包括如下几个。
active/s
:每秒本地发起的 TCP连接的数量(通过调用connect0)创建)。passive/s
:每秒远端发起的 TCP连接的数量(通过调用accept0创建)。retrans/s
:每秒TCP 重传的数量。orsts/s
:每秒的连接重置数。表示每秒钟发生的连接重置次数。atmptf/s
:每秒的连接尝试次数。表示每秒钟有多少个连接尝试被发起。estres/s
:每秒建立的连接数。表示每秒钟成功建立的连接数。
主动和被动连接计数
对于业务负载画像
很有用。重传
则是网络或者远端主机有问题的征兆
。
- 感谢你赐予我前进的力量