每一种系统级 Linux 性能工具都提供了不同的方式来提取相似的统计结果。虽然没有工具显示全部的信息,但是有些工具显示的是相同的统计信息。为了不多次(每种工具一次)解释统计信息的含义,在描述所有工具之前对这些信息进行一次性说明。
在 Linux中,一个进程要么是可运行的,要么是阻塞的(正在等待一个事件的完成)。阻塞进程可能在等待的是从I/O 设备来的数据,或者是系统调用的结果。如果进程是可运行的,那就意味着它要和其他也是可运行的进程竞争 CPU 时间。一个可运行的进程不一定会使用 CPU,但是当 Llinux 调度器决定下一个要运行的进程时,它会从可运行进程队列中挑选。如果进程是可运行的,同时又在等待使用处理器,这些进程就构成了运行队列。运行队列越长,处于等待状态的进程就越多。
性能工具通常会给出可运行的进程个数和等待 I/O 的阻塞进程个数。另一种常见的系统统计是平均负载**。系统的负载是指正在运行和可运行的进程总数**。例如,如果正在运行的进程为两个,而可运行的进程为三个,那么系统负载就是5。平均负载是给定时间内的负载量。一般情况下,取平均负载的时间为1分钟、5分钟和15分钟。这能让我们观察到负载是如何随时间变化的。
大部分现代处理器一次只能运行一个进程或线程。虽然有些处理器(比如超线程处理器)实际上可以同时运行多个进程,但是Linux 会把它们看作多个单线程处理器。如果要制造出给定单处理器同时运行多个任务的假像,Linux内核就要不断地在不同进程间切换。这种不同进程间的切换称为上下文切换,因为当其发生时,CPU 要保持旧进程的所有上下文信息,并取出新进程的所有上下文信息。上下文中包含了 Linux 跟踪新进程的大量信息,其中包括:进程正在执行的指令,分配给进程的内存,进程打开的文件等。这些上下文切换涉及大量信息的移动,因此上下文切换的开销可以是相当大的。尽量减少上下文切换的次数是个好办法。
要避免上下文切换,重要的一点是了解它们是如何发生的。首先,上下文切换可以是内核调度的结果。为了保证公平地给每个进程分配处理器时间,内核周期性地中断正在运行的进程,在适当的情况下,内核调度器会决定开始另一个进程,而不是让当前进程继续执行。每次这种周期性中断或定时发生时,系统都可能进行上下文切换。每秒定时中断的次数与架构和内核版本有关。一个检查中断频率的简单方式是用/proc/interrupts 文件,它可以确定已知时长内发生的中断次数。如下所示:
[root@webim-service-mq ~]# cat /proc/interrupts | grep timer; sleep 10; cat /proc/interrupts | grep timer
0: 10 0 0 0 IO-APIC 2-edge timer
LOC: 1935437764 2030513501 1868254470 2312543510 Local timer interrupts
HVS: 0 0 0 0 Hyper-V stimer0 interrupts
0: 10 0 0 0 IO-APIC 2-edge timer
LOC: 1935441001 2030516114 1868257784 2312545679 Local timer interrupts
HVS: 0 0 0 0 Hyper-V stimer0 interrupts
在上面,我们要求内核给出定时器启动的次数,等待10秒后,再次请求。这就是,在这台机器上定时器启动频率为(19 354 410 01 - 19 354 377 64)中断 / (10 ) 是323次中断/秒。如果上下文的切换明细多于定时器中断(也就是高于19 354 410 01 - 19 354 377 64),那么这些切换极有可能是由 I/O 请求或其他长时间运行的系统调用(如休眠)造成的。当应用请求的操作不能立即完成时,内核启动该操作,保存进程,并尝试切换到另一个已就绪进程。这能让处理器尽量保持忙状态。
此外,处理器还周期性地从硬件设备接收中断。当设备有事件需要内核处理时,它通常就会触发这些中断。比如,如果磁盘控制器刚刚完成从驱动器取数据块的操作,并准备好提供给内核,那么磁盘控制器就会触发一个中断。对内核收到的每个中断,如果已经有相应的已注册的中断处理程序,就运行该程序,否则将忽略这个中断。这些中断处理程序在系统中具有很高的运行优先级,并且通常执行速度也很快。有时,中断处理程序有工作要做,但是又不需要高优先级,因此它可以启动 “下半部”(bottom half),也就是所谓的软中断处理程序。如果有很多中断,内核会花大量的世界服务这些中断。查看 /proc/inerrupts文件可以显示出哪些 CPU 上触发了哪些中断。
CPU 使用率是个简单的概念。在任何给定的时间,CPU 可以执行7件事情中的一个:
CPU 可以是空闲的,这意味着处理器实际上没有做任何工作,并且等待有任何可以执行。
CPU 可以运行用户代码,即指定的 “用户” 时间。
CPU 可以执行 Linux 内核中的应用程序代码,这就是“系统”时间。
CPU 可以执行 “比较友好” 的或者优先级被设置为低于一般进程的用户代码。
CPU 可以处于 iowait 状态,即系统正在等待 I/O (如磁盘或网络)完成。
CPU 可以处于 irq 状态,即它正在用高优先级代码处理硬件中断。
CPU 可以处于 siftirq模式,即系统正在执行同样由中断触发的内核代码,只不过其运行于较低优先级(下半部代码).
此情景出现的条件为:发生设备中断时,而内核将其移交给用户空间之前必须对其进行一些处理(比如,处理网络包)
大多数性能工具将这些数值表示为占 CPU 总时间的百分比。这些时间的范围从0% 到 100%,但全部这三项加起来等于100%。一个具有高“系统”百分比的系统表明其大部分时间都消耗在了内核上。像 oprofile 一样的工具可以帮助确定时间都消耗在了哪里。具有高“用户”时间的系统则将其大部分时间都用来运行应用程序。
vmstat 是指虚拟内存统计,这个名称表明它能告诉我们系统的内存性能信息。幸运的是,它实际上能完成的工作不止于此。vmstat是一个很有用的命令,它能获取整个系统性能的粗略信息,包括:
它是用于获取性能大致信息的极好工具。
vmstat 可以被如下命令行调用:
vmstat [-n] [-s] [delay [count]]
vmstat 运行于两种模式:采样模式和平均模式。如果不指定参数,则vmstat 统计运行于平均模式下,vmstat 显示从系统启动以来所有统计数据的均值。但是,如果指定了延迟,那么第一个采样仍然是系统启动以来的均值,但之后 vmstat 按延迟采样系统并显示系统统计数据。下表解释了 vmstat 的选项。
vmstat 命令行选项
选项 | 说明 |
---|---|
-n | 默认情况下,vmstat定期显示每个性能统计数据的列标题。本选项禁止该特性,因此初始列标题之后,只显示性能数据。如果将 vmstat 导出为表格,使用这个选项是有好处的 |
-s | 本选项一次性输出 vmstat 收集的系统统计详细信息。该信息为系统启动后的总数据 |
delay | vmstat 采样的间隔时间 |
vmstat 提供的各种统计输出信息,使我们能跟踪系统的不同方面。下表解释了与 CPU 性能相关的输出。
与 CPU 相关的 vmstat 输出
列 | 说明 |
---|---|
r | 当前可运行的进程数。这些进程没有等待I/O,而是已经准备好运行。理想状态下,可运行进程数应与可用 CPU 的数量相等 |
b | 等待 I/O 完成的被阻塞进程数 |
forks | 创建新进程的次数 |
in | 系统发生中断的次数 |
cs | 系统发生上下文切换的次数 |
us | 用户将进程消耗的总 CPU 时间的百分比(包括“友好的” 时间) |
sy | 系统代码消耗的总 CPU 时间的百分比,其中包括消耗在 system、irq和softirq状态的时间 |
wa | 等待 I/O 消耗的总 CPU 时间的百分比 |
id | 系统空闲消耗的总 CPU 时间百分比 |
vmstat 提供了一个低开销的良好系统性能视图。由于所有的性能统计数据都以文本形式呈现,并打印输出,因此,捕捉测试中生成的数据,以及之后对其进行处理和绘图就会很方便。由于vmstat的开销如此之低,因此当我们需要一目了然地监控系统监控状况时,让它在控制台上或窗口中持续运行,甚至是在负载非常重的服务器上很实用的。
如果vmstat 运行时没有使用命令行参数,显示的将是自动启动后它记录下的统计信息的均值。根据 “CPU 使用率” 列下面的us、sy、wa和id,本例显示出系统从启动开始,基本上处于空闲状态。从启动开始,CPU 有4%(us)的时间用于执行用户应用程序代码,1%(sy)的时间执行系统代码,而其余95%(id)的时间处于空闲状态。
[root@web1 ~]# vmstat
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 222288 236304 1897140 0 0 4 772 1 1 4 1 95 0 0
尽管 vmstat 从系统启动时开始统计有助于确定系统的负载情况,但是,vmstat 最有用的是运行于采样模式下,如下面命令所示。在采样模式下,vmstat 间隔 delay 参数指定的秒数输出系统统计数据,而采样次数由 count给出。下面第一行的统计数据和上面输出的一样,是系统启动以来的均值,但之后就是定期采样。本例展示出系统的活动非常少。通过查看b列下面的0,我们可以知道在运行时没有阻塞进程。通过 r 列,我们还可以看到在vmstat采样数据时,正在运行的进程数量少于1。
[root@web1 ~]# vmstat 2 5
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 216916 236804 1901740 0 0 4 772 1 0 4 1 95 0 0
0 0 0 217452 236804 1901780 0 0 0 10 945 1610 0 0 100 0 0
0 0 0 217452 236804 1901996 0 0 0 2 1212 1794 2 1 98 0 0
0 0 0 217252 236804 1902080 0 0 0 6 984 1664 1 0 99 0 0
0 0 0 212912 236808 1902376 0 0 0 10 1333 1946 2 0 98 0 0
vmstat 是一种记录系统在一定负载或测试条件下行为的好方法。可以用 vmstat显示系统的行为,同时利用 Linux 的tee命令将结果输出到文件。如果只传递了参数 delay,vmstat就无限采样。在测试开始前启动 vmstat,测试结束后终止 vmstat。输出文件的形式可以是表格,并能够用于查看系统对负载和各种系统事件是如何反应的。下面给出了按照这个方法得到的输出。在这个例子中,我们可以查看到系统发生的中断和上下文切换。在in列和cs列能分别查看到中断和上下文切换的总数。
[root@web1 ~]# vmstat 1 | tee /home/output
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 1 0 200016 237340 1920316 0 0 4 772 0 0 4 1 95 0 0
0 0 0 199768 237468 1920396 0 0 128 0 987 1667 1 0 99 0 0
0 0 0 199768 237472 1920396 0 0 0 40 844 1551 0 1 99 0 0
0 0 0 200768 237472 1920400 0 0 0 0 890 1578 0 0 99 0 0
0 0 0 201908 237472 1920436 0 0 0 0 1187 1775 2 0 98 0 0
0 0 0 196420 237472 1920556 0 0 0 0 995 1717 1 0 99 0 0
0 0 0 196420 237476 1920596 0 0 0 44 832 1551 1 0 100 0 0
0 0 0 190888 237480 1920740 0 0 0 40 1638 2253 10 5 86 1 0
0 0 0 191648 237480 1920728 0 0 0 0 937 1592 1 0 100 0 0
0 0 0 192124 237480 1920764 0 0 0 0 994 1656 1 0 99 0 0
0 0 0 192652 237480 1920984 0 0 0 0 1237 1808 1 1 99 0 0
vmstat 甚至可以抽取各种统计数据更详细的信息,如下所示,现在来看 CPU 的统计信息。第一组数据,即 “CPU ticks”,显示的是自系统启动的 CPU 时间,这里的 “tick” 是一个时间单位。虽然精简的 vmstat 输出仅显示四个 CPU 状态——us、sy、id和wa,这里则显示了全部CPU ticks的分布情况。此外,我们还可以看到中断和上下文切换的总数。forks,它表示的是从系统启动开始,已经创建的新进程的数量。
[root@web1 ~]# vmstat -s
3733576 K total memory
1379900 K used memory
2038516 K active memory
1134608 K inactive memory
189336 K free memory
237772 K buffer memory
1926568 K swap cache
0 K total swap
0 K used swap
0 K free swap
**124454312 non-nice user cpu ticks**
**2825253 nice user cpu ticks**
**20589294 system cpu ticks**
**2837811966 idle cpu ticks**
**373677 IO-wait cpu ticks**
**0 IRQ cpu ticks**
**4637515 softirq cpu ticks**
**0 stolen cpu ticks**
119936227 pages paged in
23090840788 pages paged out
0 pages swapped in
0 pages swapped out
**774353928 interrupts**
**174242040 CPU context switches**
1619503864 boot time
**25287224 forks**
vmstat 提供了关于Linux系统性能的众多信息。在调查系统问题时,它是核心工具之一。
top 是 Linux 系统监控工具中的利刃。它善于将相当多的系统整体性能信息方在一个屏幕上。显示内容还能以交互的方式进行改变,因此,在系统运行时,如果一个特定的问题不断突显,可以修改top显示的信息。
默认情况下,top表现为一个将占用 CPU 最多的进程按降序排列的列表。这使得我们能够迅速找出哪个程序独占了 CPU。top 根据指定的延迟定期更新这个列表(其初始化值为3秒)。
top 用如下命令行调用:
top [-d delay] [-i] [n iter] [-b]
top 实际上有两种模式的选项:命令行选项和运行时选项。命令行选项决定 top 如何显示其信息。下表给出的命令行选项会影响 top 显示的性能统计信息的类型和频率。
top 命令行选项
选项 | 说明 |
---|---|
-d delay | 统计数据更新的时间间隔 |
-n iterations | 退出当前的迭代次数。top 更新统计数据的次数为 iterations 次 |
-i | 是否显示空闲进程 |
-b | 以批处理模式运行。通常,top只显示单屏信息,超出该屏幕的进程不显示。该选项显示全部进程,如果要将top的输出保存为文件或将输出给另一个命令进行处理,那么该选项是很有用的 |
在允许top时,为了调查特定问题,我们可能想要对我们的观察略作调整。top输出的可定制性很高。下表给出的选项可以在 top 运行期间修改显示的统计信息:
top运行时选项
选项 | 说明 |
---|---|
A | 进程信息的“另一种”显示方式,其内容为各种系统资源最大的消耗者 |
I | 选择 top 是否用系统中的 CPU 数量除以CPU 使用率 |
f | 显示配置界面,选择在屏幕上显示哪些进程统计信息 |
o | 显示一个配置界面,修改显示统计信息的顺序 |
下表给出的选项打开或关闭各种系统级信息的显示。关闭不需要统计信息有助于在屏幕显示更多进程。
top 运行时输出切换选项
选项 | 说明 |
---|---|
1 | 切换 CPU 使用率是按独立使用率显示还是按总量显示 |
i | 切换更新和显示平均负载以及正常运行时间信息 |
t | 切换显示每个CPU消耗时间的情况。它还切换显示当前运行的进程数量。显示应用程序全部的独立线程,而不是显示每个应用程序的总数 |
m | 在屏幕上切换显示系统内存使用信息。默认情况,最占用 CPU 的进程第一个显示。不过,按照其它特征排序可能更有用 |
下表对 top 支持的不同排序模式进行了说明。按内存消耗量排序尤其有用,它能找出哪个进程消耗了最多的内存。
top 输出排序 / 显示选项
选项 | 说明 |
---|---|
P | 按 CPU 消耗量对任务排序。最高的 CPU 用户第一个显示 |
T | 按到目前为止使用的 CPU 时间总量对任务排序。总量最高的第一个显示 |
N | 按任务的 PID 进行排序。PID 最低第一个显示 |
A | 按任务时长进行排序。最新的 PID 第一个显示。通常与“按PID 排序”相反 |
i | 隐藏空闲和不消耗 CPU 的任务 |
top 性能统计信息
选项 | 说明 |
---|---|
us | 用户应用程序消耗的 CPU 时间 |
sy | 内核消耗的 CPU 时间 |
ni | 修改过 “友的”值的进程消耗的 CPU 时间 |
id | 空闲的 CPU 时间 |
wa | 等待 I/O 的CPU 时间 |
hi | irq 处理程序消耗的CPU 时间 |
si | softirq 处理程序消耗的 CPU 时间 |
load average | 1分钟、5分钟、15分钟的平均负载 |
%CPU | 特定进程消耗 CPU 时间的百分比 |
PRI | 进程优先级,值越大表示优先级越高。RT代表任务为实时优先级,该优先级高于标准范围 |
NI | 进程的nice值。nice值越高,系统执行该进程的必要性就越低。对于具有高nice值的进程,通常其优先级会非常低 |
WCHAN | 若进程在等待 I/O,该项显示其等待的是哪个内核函数 |
S | 进程当前状态。睡眠状态(S),运行状态(R),僵尸状态(Z),不可中断的睡眠状态(D),或者跟踪状态(T) |
TIME | 自进程开始执行起已消耗的总的 CPU 时间(用户和系统) |
COMMAND | 进程正在执行的命令 |
LC | 进程执行时最后使用的 CPU 编号 |
FLAGS | 该项切换是否更新和显示平均负载与正常运行时间信息 |
top 提供了不同的正在运行进程的大量信息,是找出资源消耗大户的好方法。
就像vmstat一样,procinfo 为系统整体信息提供总览。尽管它提供的有些信息与vmstat相同,但它还会给出 CPU 从每个设备接收的中断数量。其输出格式的易读性比 vmstat 稍微强一点,但却会占用更多的屏幕空间。
procinfo 的调用命令行如下:
procinfo [-f] [-d] [-D] [-n sec] [-f file]
下表描述了不同的选项,用于修改procinfo显示样本的输出和评率。
procinfo 命令行选项
选项 | 说明 |
---|---|
-f | 全屏运行procinfo |
-d | 显示样本统计信息的变化,而非总和 |
-D | 显示样本统计信息的总和,而非变化率 |
-n sec | 样本之间停顿的秒数 |
-F file | 将procinfo 的输出发送到文件 |
procinfo CPU 统计信息
选项 | 说明 |
---|---|
user | CPU 花费的总的用户时间,形式为天、小时和分钟 |
nice | CPU 花费的总的友好时间,形式为天、小时和分钟 |
system | CPU 花费的总的系统时间,形式为天、小时和分钟 |
idle | CPU 花费的总的空闲时间,形式为天、小时和分钟 |
irq 0-N | 显示 irq编号,已经启动的次数,以及那个内核驱动程序应对其负责 |
和vmstat已经top一下,procinfo是一个低开销的命令,适合让其自行在控制台或屏幕窗口运行。它能够很好地反映系统的健康和性能。
mpstat 是一个简单的命令,向我们展示随着时间变化的 CPU 行为。mpstat 最大的优势点是在统计信息的旁边显示时间,由此,我们可以找出 CPU 使用率与时间的关系。
如果有多个 CPU 或 超线程 CPU,mpstat 还能够把 CPU 使用率按处理器进行区分,因此我们可以发现与其他处理器相比,是否某个处理器做了更多的工作。可以选择想要监控的单个处理器,也可以要求 mpstat 对所有的处理器都进行监控。
mpstat 可以用如下命令行调用:
mpstat [-P {cpu | ALL } ] [delay [count]]
和之前一样,delay指定了采样间隔,count指定了采样次数。下表解释了 mpstat 命令行选项的含义。
mpstat 命令行选项
选项 | 说明 |
---|---|
-P {cpu \ ALL} | 告诉mpstat监控哪个CPU,CPU 取值范围为0~(CPU 总数 -1) |
delay | 指明mpstat 在采样之间应等待的时长 |
mpstat 提供与其他 CPU 性能工具相似的信息,但是,它允许将信息按照特定系统中的单个处理器进行分类。下表给出了 mpstat 支持的选项。
mpstat CPU 统计信息
选项 | 说明 |
---|---|
user | 前一个采样中 CPU 消耗在用户时间上的百分比 |
nice | 前一个采样中 CPU 执行低优先级(或 nice)进程消耗时间的百分比 |
system | 前一个采样中 CPU 消耗在系统时间上的百分比 |
iowait | 前一个采样中 CPU 等待 I/O 消耗时间的百分比 |
irq | 前一个采样中 CPU 处理中断消耗时间的百分比 |
softirq | 前一个采样中,中断处理后,内核完成所需工作消耗的 CPU 时间百分比 |
idle | 前一个采样中 CPU空闲时间百分比 |
mpstat 是一种很好的工具,可以分类提供每个处理器的执行情况。由于 mpstat 给出了每个 CPU 的明细,因此我们可以识别是否有哪个处理器正逐渐出现超负载情况。
[root@web1 ~]# mpstat -P ALL 1 2
Linux 4.18.0-147.5.1.el8_1.x86_64 (webim-service-mq) 2021年10月19日 _x86_64_ (4 CPU)
19时48分49秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
19时48分50秒 all 0.00 0.00 0.25 0.00 0.00 0.25 0.00 0.00 0.00 99.50
19时48分50秒 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
19时48分50秒 1 0.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00 99.00
19时48分50秒 2 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00
19时48分50秒 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
19时48分50秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
19时48分51秒 all 0.25 0.00 0.50 0.00 0.00 0.25 0.00 0.00 0.00 99.00
19时48分51秒 0 0.00 0.00 0.99 0.00 0.00 0.00 0.00 0.00 0.00 99.01
19时48分51秒 1 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00
19时48分51秒 2 0.98 0.00 0.00 0.00 0.00 0.98 0.00 0.00 0.00 98.04
19时48分51秒 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均时间: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
平均时间: all 0.12 0.00 0.37 0.00 0.00 0.25 0.00 0.00 0.00 99.25
平均时间: 0 0.00 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 99.50
平均时间: 1 0.00 0.00 0.50 0.00 0.00 0.50 0.00 0.00 0.00 99.00
平均时间: 2 0.50 0.00 0.50 0.00 0.00 0.50 0.00 0.00 0.00 98.51
平均时间: 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
sar 用另一种方法来收集系统数据。sar能有效地收集到的系统性能数据记录到二进制二级,之后,可以重播这些文件。sar是一种低开、记录系统执行情况信息的方法。
sar 命令可以用于记录性能信息,回放之前的记录信息,以及显示当前系统的实时信息。sar命令的输出可以进行格式,使之易于导入数据库,或是输送给其他Linux命令进行处理。
sar 可以使用如下命令行调用:
sar [options] [delay [count] ]
尽管 sar 的报告涉及 Linux 多个不同领域,其统计数据有两种不同的形式。一组统计数据是采样时的瞬时值。另一组则是自上一次采样后的变化值。下表解释了 sar 的命令行选项。
sar 命令行选项
选项 | 说明 |
---|---|
-c | 报告每秒创建的进程数量 |
-I {irq \ SUM \ ALL \ XALL } | 报告系统已发生中断的速率 |
-P {CPU \ ALL } | 报告系统已发生中断的速率 |
-q | 报告机器的运行队列长度和平均负载 |
-u | 报告系统的CPU 使用情况(该项未默认输出) |
-w | 报告系统中已发生的上下文切换次数 |
-o filename | 指定保存性能统计信息的二进制输出文件名 |
-f filename | 指定性能统计信息的文件名 |
delay | 需等待的采用间隔时间 |
count | 记录的样本总数 |
sar 提供的系统级 CPU 性能统计数据集与我们在进程工具中看到的类似(名字不同)。
sar CPU 统计信息
选项 | 说明 |
---|---|
user | 前一个采样中 CPU 消耗在用户时间上的百分比 |
nice | 前一个采样中 CPU 执行低优先级(或nice)进程消耗时间的百分比 |
system | 前一个采样中 CPU 消耗在系统时间上的百分比 |
iowait | 前一个采样中 CPU 等待I/O 消耗时间百分比 |
idle | 前一个采样中 CPU 空闲时间百分比 |
runq-sz | 采样时,运行队列的长度 |
plist-sz | 采样时的进程(运行、睡眠或等待I/O)数 |
idavg-1 | 前1分钟的平均负载 |
idavg-5 | 前5分钟的平均负载 |
idavg-15 | 前15分钟的平均负载 |
proc/s | 每秒新建进程数(该项等同于 vmstat 中的 forks项) |
cswch | 每秒上下文切换次数 |
intr/s | 每秒触发的中断次数 |
sar最显著的优势之一是,它使你能把不同类型时间戳系统数据保存到日志文件,以便日后检索和审查。当试图找出特定机器在特定时间出现故障的原因时,这个特性被证明是非常遍历的。
下面的命令要求每秒有三个 CPU 采样,其结果保存到二进制文件。该命令没有任何可视化输出,完成即返回。
[root@web1]# sar -o /home/sar_test 1 3
保存到 /home/sar_test 文件后,我们就能以各种格式显示它。默认格式是可读,如下所示,下面显示与其他系统监控命令类似的信息,我们可以看出处理器在特定时间是如何消耗其时间的。
[root@web1]# sar -f /home/sar_test
Linux 4.18.0-147.5.1.el8_1.x86_64 (webim-service-mq) 2021年10月20日 _x86_64_ (4 CPU)
09时58分02秒 CPU %user %nice %system %iowait %steal %idle
09时58分03秒 all 0.25 0.00 0.00 0.00 0.00 99.75
09时58分04秒 all 0.25 0.00 0.50 0.00 0.00 99.25
09时58分05秒 all 0.25 0.00 0.25 0.00 0.00 99.50
平均时间: all 0.25 0.00 0.25 0.00 0.00 99.50
sar,还可以将统计数据输出为一种轻松带入关系数据库的格式,如下所示。这有助于保存大量的性能数据。一旦将其导入到关系数据库,就可以用所有的关系数据库工具对这些性能数据进行分析。
[root@web1]# sar -f /home/sar_test -H
Linux 4.18.0-147.5.1.el8_1.x86_64 (webim-service-mq) 2021年10月20日 _x86_64_ (4 CPU)
09时58分02秒 kbhugfree kbhugused %hugused
09时58分03秒 0 0 0.00
09时58分04秒 0 0 0.00
09时58分05秒 0 0 0.00
平均时间: 0 0 0.00