CPU 性能分析工具

性能分析时,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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,192评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,858评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,517评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,148评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,162评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,905评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,537评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,439评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,956评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,083评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,218评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,899评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,565评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,093评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,201评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,539评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,215评论 2 358

推荐阅读更多精彩内容