Linux性能工具:系统CPU

  • CPU 性能统计信息
    • 运行队列统计
    • 上下文切换
    • 中断
    • CPU 使用率
  • CPU性能工具
    • vmstat(虚拟内存统计)
      • CPU 性能相关的选项
      • 用法示列
    • top
      • CPU 性能相关的选项
    • procinfo(从/proc 文件系统显示信息)
      • CPU 性能相关的选项
      • mpstat(多处理器统计)
      • CPU 性能相关选项
      • 用法示列
    • sar(系统活动报告)
      • CPU 性能相关的选项
      • 用法示例

工具是追踪性能问题时的第一道防线。它们能展示整个系统的性能情况和哪些部分表现不好。现在我们将学习这些工具可以测量的统计信息,以及如何使用各种工具收集这些统计结果。学习完成后,我们将能够:

  • 理解系统级性能的基本指标,包括CPU的使用情况。
  • 明白哪些工具可以检索这些系统性能指标。

CPU 性能统计信息

每一种系统级 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 timer0:         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 interrupts0:         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 使用率是个简单的概念。在任何给定的时间,CPU 可以执行7件事情中的一个:

  1. CPU 可以是空闲的,这意味着处理器实际上没有做任何工作,并且等待有任何可以执行。

  2. CPU 可以运行用户代码,即指定的 “用户” 时间。

  3. CPU 可以执行 Linux 内核中的应用程序代码,这就是“系统”时间。

  4. CPU 可以执行 “比较友好” 的或者优先级被设置为低于一般进程的用户代码。

  5. CPU 可以处于 iowait 状态,即系统正在等待 I/O (如磁盘或网络)完成。

  6. CPU 可以处于 irq 状态,即它正在用高优先级代码处理硬件中断。

  7. CPU 可以处于 siftirq模式,即系统正在执行同样由中断触发的内核代码,只不过其运行于较低优先级(下半部代码).
    此情景出现的条件为:发生设备中断时,而内核将其移交给用户空间之前必须对其进行一些处理(比如,处理网络包)

    大多数性能工具将这些数值表示为占 CPU 总时间的百分比。这些时间的范围从0% 到 100%,但全部这三项加起来等于100%。一个具有高“系统”百分比的系统表明其大部分时间都消耗在了内核上。像 oprofile 一样的工具可以帮助确定时间都消耗在了哪里。具有高“用户”时间的系统则将其大部分时间都用来运行应用程序。

CPU性能工具

vmstat(虚拟内存统计)

vmstat 是指虚拟内存统计,这个名称表明它能告诉我们系统的内存性能信息。幸运的是,它实际上能完成的工作不止于此。vmstat是一个很有用的命令,它能获取整个系统性能的粗略信息,包括:

  • 正在运行的进程个数。
  • CPU 的使用情况。
  • CPU 接收的中断个数。
  • 调度器执行的上下文切换次数。

它是用于获取性能大致信息的极好工具。

CPU 性能相关的选项

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 st1  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 st1  0      0 216916 236804 1901740    0    0     4   772    1    0  4  1 95  0  00  0      0 217452 236804 1901780    0    0     0    10  945 1610  0  0 100  0  00  0      0 217452 236804 1901996    0    0     0     2 1212 1794  2  1 98  0  00  0      0 217252 236804 1902080    0    0     0     6  984 1664  1  0 99  0  00  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 st0  1      0 200016 237340 1920316    0    0     4   772    0    0  4  1 95  0  00  0      0 199768 237468 1920396    0    0   128     0  987 1667  1  0 99  0  00  0      0 199768 237472 1920396    0    0     0    40  844 1551  0  1 99  0  00  0      0 200768 237472 1920400    0    0     0     0  890 1578  0  0 99  0  00  0      0 201908 237472 1920436    0    0     0     0 1187 1775  2  0 98  0  00  0      0 196420 237472 1920556    0    0     0     0  995 1717  1  0 99  0  00  0      0 196420 237476 1920596    0    0     0    44  832 1551  1  0 100  0  00  0      0 190888 237480 1920740    0    0     0    40 1638 2253 10  5 86  1  00  0      0 191648 237480 1920728    0    0     0     0  937 1592  1  0 100  0  00  0      0 192124 237480 1920764    0    0     0     0  994 1656  1  0 99  0  00  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 -s3733576 K total memory1379900 K used memory2038516 K active memory1134608 K inactive memory189336 K free memory237772 K buffer memory1926568 K swap cache0 K total swap0 K used swap0 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 in23090840788 pages paged out0 pages swapped in0 pages swapped out**774353928 interrupts****174242040 CPU context switches**1619503864 boot time**25287224 forks**

vmstat 提供了关于Linux系统性能的众多信息。在调查系统问题时,它是核心工具之一。

top

top 是 Linux 系统监控工具中的利刃。它善于将相当多的系统整体性能信息方在一个屏幕上。显示内容还能以交互的方式进行改变,因此,在系统运行时,如果一个特定的问题不断突显,可以修改top显示的信息。

默认情况下,top表现为一个将占用 CPU 最多的进程按降序排列的列表。这使得我们能够迅速找出哪个程序独占了 CPU。top 根据指定的延迟定期更新这个列表(其初始化值为3秒)。

CPU 性能相关的选项

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 提供了不同的正在运行进程的大量信息,是找出资源消耗大户的好方法。

procinfo(从/proc 文件系统显示信息)

就像vmstat一样,procinfo 为系统整体信息提供总览。尽管它提供的有些信息与vmstat相同,但它还会给出 CPU 从每个设备接收的中断数量。其输出格式的易读性比 vmstat 稍微强一点,但却会占用更多的屏幕空间。

CPU 性能相关的选项

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(多处理器统计)

mpstat 是一个简单的命令,向我们展示随着时间变化的 CPU 行为。mpstat 最大的优势点是在统计信息的旁边显示时间,由此,我们可以找出 CPU 使用率与时间的关系。

如果有多个 CPU 或 超线程 CPU,mpstat 还能够把 CPU 使用率按处理器进行区分,因此我们可以发现与其他处理器相比,是否某个处理器做了更多的工作。可以选择想要监控的单个处理器,也可以要求 mpstat 对所有的处理器都进行监控。

CPU 性能相关选项

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.0019时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 命令可以用于记录性能信息,回放之前的记录信息,以及显示当前系统的实时信息。sar命令的输出可以进行格式,使之易于导入数据库,或是输送给其他Linux命令进行处理。

CPU 性能相关的选项

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

Linux性能工具:系统CPU相关推荐

  1. Linux性能优化 Linux性能工具:CPU top

    不显示未使用任何CPU的进程启动top top -i top - 16:16:14 up 8:12, 1 user, load average: 1.04, 1.24, 1.35 Tasks: 356 ...

  2. 超全整理 | 嵌入式Linux 性能工具和诊断思路

    作为程序员,和 Linux 打交道,在服务器上分析系统性能情况,我觉得是每一个后端工程师都无法避开的事情. 无论你是开发还是运维,可能都经历过这样的场景: 流量高峰期,服务器 CPU 使用率过高报警, ...

  3. 【linux性能优化】CPU使用率过高分析

    最常用什么指标来描述系统的 CPU 性能呢? 可能不是平均负载,也不是 CPU上下文切换,而是另一个更直观的指标CPU使用率 CPU使用率是单位时间内CPU使用情况的统计,以百分比的方式展示 那么,作 ...

  4. Linux性能监控(CPU监控)

    Linux性能监控(CPU监控) 主要分为四类: cup监控 内存监控命令 IO性能 网络性能 cup监控 关于CPU,有3个重要的概念:上下文切换(context switchs),运行队列(Run ...

  5. Linux性能优化之CPU、内存、IO优化

    Linux 的性能进行监测,以下是 VPSee 常用的工具: 工具    简单介绍 top    查看进程活动状态以及一些系统状况 vmstat    查看系统状态.硬件和系统信息等 iostat   ...

  6. linux 查看核数与线程数,Linux下查看系统CPU个数、核心数、线程数

    Linux下查看系统CPU个数.核心数.线程数 查看系统CPU个数(物理个数)cat /proc/cpuinfo |grep "physical id"|sort -u 结果如下: ...

  7. linux系统和性能监控之cpu篇,Linux性能监控之CPU篇(2)

    正如我们之前讨论的任何系统的性能比较都是基于基线的,并且监控CPU的性能就是以上3点,运行队列.CPU使用率和上下文切换.以下是一些对于CPU很普遍的性能要求: 1.对于每一个CPU来说运行队列不要超 ...

  8. Linux性能优化:CPU篇

    本文主要帮助理解 CPU 相关的性能指标,常见的 CPU 性能问题以及解决方案梳理. 系统平均负载 简介 系统平均负载:是处于可运行或不可中断状态的平均进程数. 可运行进程:使用 CPU 或等待使用 ...

  9. “linux性能”工具集助力分析优化Linux

    序 这段时间的工作全都扔在了Linux性能分析优化上. 看"一点"的优化,测试程序能轻松完成数据统计,并且自定义程度高:但"全局"的优化,或是在"侦查 ...

  10. Linux性能监控之CPU

    CPU介绍 内核调度器将负责调度2种资源种类:线程(单一或者多路)和中断. 调度器去定义不同资源的不同优先权. 优先级:Interrupts(中断) > Kernel(System) Proce ...

最新文章

  1. 多家巨头实测鸿蒙系统:比安卓快60%
  2. Nessus漏洞扫描教程之使用Nmap工具扫描识别指纹
  3. 玩转 Linux 之:磁盘分区、挂载知多少?
  4. C++模板之隐式实例化、显示实例化、隐式调用、显示调用和模板特化详解
  5. 爬虫-----自定义框架
  6. Ns3 构建哑铃型拓扑,并实现两个点的TCP连接(详细请戳全文)
  7. turbo c语言教程,C语言入门教程之 Turbo C程序的基本组成
  8. c++初学,计算立方体的体积和面积,并比较两个立方体是否相同:
  9. 根据经纬度算两点距离
  10. 【机器学习】基于朴素贝叶斯的新闻分类
  11. electron 解压zip_electron 打包问题 解决
  12. 带超前进位的四位全加器
  13. Error while starting capture on link: Port 0 has already a filter applied 解决方法
  14. 一文搞懂InheritedWidget局部刷新机制
  15. java实现word,pdf,excel,图片添加水印
  16. DirectShow 智能连接
  17. 【WCN685X】WCN685X hostapd 设置country码不生效问题分析及解决方案
  18. 杭电ACM-LCY算法进阶培训班-专题训练(强连通分量)
  19. 深度学习论文: LRNnet: a light-weighted network for real-time semantic segmentation及其PyTorch实现
  20. 蒙氏教具 色板盒 颜色认知三段卡蒙氏教具

热门文章

  1. Keras入门级MNIST手写数字识别超级详细教程
  2. 关注Oracle 02 财务系统的选型想说简单不容易
  3. 计算机中的cmd是什么意思,计算机中的cmd是什么意思,全称是什么
  4. CMMI 知识扫盲篇
  5. 【联想拯救者R7000】蓝牙和wifi图标不显示问题(已解决)
  6. 1人30天44587行代码,分享舍得网开发经验(修改版)
  7. TS:虚机ipv6网络不通问题-2022.5.16(已解决-博客分享)
  8. 《精通Linux设备驱动程序开发》——音频驱动程序
  9. 用java语言写出青蛙的身份_第三章 JAVA 语言基础
  10. [linux kernel] 内核下RX8025对接系统时钟