美文网首页
CPU 性能分析工具

CPU 性能分析工具

作者: 砥砺前行的人 | 来源:发表于2022-04-20 10:29 被阅读0次

    性能分析时,CPU 通常是首当其中的。

    uptime

    可供简单浏览,不推荐在需要精确度的场景使用
    uptime 用于显示当前系统的运行时间,用户登录数以及系统的平均负载。输出内容如下:

    $ uptime
    11:44:28 up 18 days, 23:56,  2 users,  load average: 0.00, 0.06, 0.03
    

    最后三个数字是1、5 和15 分钟内的平均负载。通过比较这三个数字,你可以判断负载在15 分钟内(或者其他时间段)是在上升、下降,还是平稳。

    系统负载平均值是处于可运行或不可中断状态的平均进程数。 处于可运行状态的进程要么正在使用 CPU,要么正在等待使用 CPU。 处于不可中断状态的进程正在等待一些 I/O 访问,例如等待磁盘。 取三个时间间隔的平均值。 负载平均值未针对系统中的 CPU 数量进行标准化,因此负载平均值为 1 意味着单个 CPU 系统一直在加载,而在 4 CPU 系统上则意味着它有 75% 的时间处于空闲状态。load average 大于CPU 数量表示CPU 不足以服务线程,有些线程在等待。如果 load average 小于CPU 数量,这(很可能)代表还有一些余量,线程可以在它们想要的时候在CPU 上运行。

    Linux 目前把在不可中断状态执行磁盘I/O 的任务也计入了平均负载。这意味着平均负载再也不能单用来表示CPU 余量或者饱和度,因为不能单从这个值推断出CPU 或者磁盘负载。由于负载可能会在CPU 和磁盘之间不断变化,比较这三个平均负载数值也变得困难了。在Linux 上最好通过一些其他的指标了解CPU 负载

    vmstat

    vmstat 主要是用来显示虚拟内存的数据。其中也包含了 CPU 的活动数据。在最后几列打印了系统全局范围的CPU 平均负载,打印如下:

    $ vmstat 1
    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
     r  b 交换 空闲 缓冲 缓存   si   so    bi    bo   in   cs us sy id wa st
     0  0 177408 1014304 2606736 11480716    0    0     5    25    1    1  0  0 100  0  0
     0  0 177408 1014328 2606736 11480716    0    0     0     0   85  152  0  0 100  0  0
     0  0 177408 1014328 2606736 11480716    0    0     0     0  113  206  0  0 100  0  0
     0  0 177408 1014328 2606736 11480716    0    0     0     0   64  142  0  0 100  0  0
     0  2 177408 1014328 2606740 11480716    0    0     0  1192   77  155  0  0 100  0  0
    

    输出的第一行是系统启动以来的总结信息,Linux 上的r 列除外——这个是显示当前值的。

    • r:可运行线程的总数,在Linux 上,r 列代表所有等待的加上正在运行的线程数
    • us:用户态时间
    • sy:系统态时间(内核)
    • id:空闲
    • wa:等待I/O,即线程被阻塞等待磁盘I/O 时的CPU 空闲时间
    • st:CPU 在虚拟化的环境下在其他租户上的开销

    mpstat

    显示处理器相关数据。打印如下:

    $ mpstat 1 5
    Linux 4.15.0-112-generic (huya-stf-4)   2022年04月19日     _x86_64_    (12 CPU)
    
    16时20分19秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
    16时20分20秒  all    0.08    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.92
    16时20分21秒  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    16时20分22秒  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    16时20分23秒  all    0.08    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.92
    16时20分24秒  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    平均时间:  all    0.03    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.97
    

    选项-P ALL用来打印每个CPU 的报告。mpstat 默认只打印系统级别的总结信息。

    • CPU:逻辑CPU ID,或者all 表示总结信息。
    • %usr:用户态时间。
    • %nice:以nice 优先级运行的进程用户态时间。
    • %sys:系统态时间(内核)。
    • %iowait:I/O 等待。
    • %irq:硬件中断CPU 用量。
    • %soft:软件中断CPU 用量。
    • %steal:耗费在服务其他租户的时间。
    • %guest:花在访客虚拟机的时间。
    • %idle:空闲。

    sar

    系统活动分析。打印如下:

    $ sar 1 5
    Linux 4.15.0-112-generic (huya-stf-4)   2022年04月19日     _x86_64_    (12 CPU)
    
    16时30分08秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
    16时30分09秒     all      0.00      0.00      0.00      0.00      0.00    100.00
    16时30分10秒     all      0.00      0.00      0.00      0.00      0.00    100.00
    16时30分11秒     all      0.00      0.00      0.08      0.00      0.00     99.92
    16时30分12秒     all      1.83      0.00      0.91      0.00      0.00     97.26
    16时30分13秒     all      0.17      0.00      0.08      0.00      0.00     99.75
    平均时间:     all      0.40      0.00      0.22      0.00      0.00     99.38
    

    当然 sar 还支持很多系统指标监控,CPU只是其中一个

    ps

    报告当前进程的快照。属于最常用监控进程的命令。打印如下:

     ps -aux
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root         1  0.0  0.0 215448  8324 ?        Ss   3月31   1:37 /sbin/init splash
    root         2  0.0  0.0      0     0 ?        S    3月31   0:00 [kthreadd]
    root         4  0.0  0.0      0     0 ?        I<   3月31   0:00 [kworker/0:0H]
    root         6  0.0  0.0      0     0 ?        I<   3月31   0:00 [mm_percpu_wq]
    

    Linux 上,%CPU 列显示了在前一秒内所有CPU 上的CPU 用量之和。一个单线程的CPU型进程会报告100%。而一个双线程的CPU 型进程则会报告200%。

    top

    展示 Linux 进程信息。
    top 命令监控了运行得最多的进程,以一定间隔刷新屏幕。打印如下:

    $ top
    top - 16:35:34 up 19 days,  4:47,  2 users,  load average: 0.00, 0.00, 0.00
    任务: 309 total,   1 running, 226 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  0.3 us,  0.1 sy,  0.0 ni, 99.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem : 16282212 total,   774464 free,  1180456 used, 14327292 buff/cache
    KiB Swap:  2097148 total,  1919740 free,   177408 used. 14618152 avail Mem
    
    进� USER      PR  NI    VIRT    RES    SHR �  %CPU %MEM     TIME+ COMMAND
    30499 huya      20   0   31540   3952   3196 R  20.0  0.0   0:00.03 top
        1 root      20   0  215448   8324   5280 S   0.0  0.1   1:37.25 systemd
        2 root      20   0       0      0      0 S   0.0  0.0   0:00.35 kthreadd
        4 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 kworker/0:0H
        6 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 mm_percpu_wq
        7 root      20   0       0      0      0 S   0.0  0.0   0:00.35 ksoftirqd/0
        8 root      20   0       0      0      0 I   0.0  0.0   5:20.85 rcu_sched
    

    顶部是系统范围的统计信息,而下面则是进程/任务的列表,默认按照CPU 用量排序。

    pidstat

    Linux 上的pidstat 工具按进程或线程打印CPU 用量,包括用户态和系统态时间的分解。默认情况下,仅循环输出活动进程的信息。输出如下:

    $ pidstat -p 6298 1 5
    Linux 4.15.0-112-generic (huya-stf-4)   2022年04月19日     _x86_64_    (12 CPU)
    
    16时44分33秒   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
    16时44分34秒  1000      6298    0.00    0.00    0.00    0.00    0.00     1  bash
    16时44分35秒  1000      6298    0.00    0.00    0.00    0.00    0.00     1  bash
    16时44分36秒  1000      6298    0.00    0.00    0.00    0.00    0.00     1  bash
    16时44分37秒  1000      6298    0.00    0.00    0.00    0.00    0.00     1  bash
    16时44分38秒  1000      6298    0.00    0.00    0.00    0.00    0.00     1  bash
    平均时间:  1000      6298    0.00    0.00    0.00    0.00    0.00     -  bash
    

    time

    运行程序并总结系统资源使用情况。举例如下:

    $ /usr/bin/time -v cp squid.tgz squid2.tgz
        Command being timed: "cp squid.tgz squid2.tgz"
        User time (seconds): 0.00
        System time (seconds): 0.03
        Percent of CPU this job got: 65%
        Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.04
        Average shared text size (kbytes): 0
        Average unshared data size (kbytes): 0
        Average stack size (kbytes): 0
        Average total size (kbytes): 0
        Maximum resident set size (kbytes): 2736
        Average resident set size (kbytes): 0
        Major (requiring I/O) page faults: 0
        Minor (reclaiming a frame) page faults: 149
        Voluntary context switches: 3
        Involuntary context switches: 1
        Swaps: 0
        File system inputs: 0
        File system outputs: 60088
        Socket messages sent: 0
        Socket messages received: 0
        Signals delivered: 0
        Page size (bytes): 4096
        Exit status: 0
    

    选项-v 一般不在shell 内建版中提供,需要通过绝对路径调用

    perf

    Linux 性能分析工具。Linux 的性能计数器是一个新的基于内核的子系统,它为所有事物的性能分析提供了一个框架。 它还涵盖了硬件级别(CPU/PMU、性能监控单元)功能和软件功能(软件计数器、跟踪点)。命令选项如下:


    image.png

    相关文章

      网友评论

          本文标题:CPU 性能分析工具

          本文链接:https://www.haomeiwen.com/subject/mjssertx.html