前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >性能之CPU定位工具介绍

性能之CPU定位工具介绍

作者头像
灰子学技术
发布2022-04-27 15:38:37
6680
发布2022-04-27 15:38:37
举报
文章被收录于专栏:灰子学技术灰子学技术

本篇文章算是一篇读书笔记,基本上是把CPU相关的知识作了一个归纳整理,方便后续查看和排查问题。

对于CPU来说,涉及到的主要指标包括:CPU使用率、平均负载、上下文切换、硬中断、软中断、等待io和CPU缓存,而CPU的性能问题也都是与这些指标一一对应的,下面是针对不同的指标的一个定位关联图示。

一、CPU性能指标

二、常用工具介绍

1、top: // 默认5s输出一次

代码语言:javascript
复制
$ top
# 进程数量 568个,有5个处于running状态,563个处于sleeping状态,线程总量是2842个(备注:zombie表示僵尸进程)
Processes: 568 total, 5 running, 563 sleeping, 2842 threads 
# Load Avg:平均负载1分钟、5分钟、15分钟的情况分别是3.21个、3.33个、3.60个
# CPU usage :CPU使用率用户态:7.77%,内核态:6.85%,闲置状态是:85.37%                                   09:26:12
Load Avg: 3.21, 3.33, 3.60  CPU usage: 7.77% user, 6.85% sys, 85.37% idle
SharedLibs: 362M resident, 41M data, 32M linkedit.
MemRegions: 330357 total, 3469M resident, 148M private, 2426M shared.
PhysMem: 16G used (2987M wired), 38M unused.
VM: 4939G vsize, 2317M framework vsize, 6032657(64) swapins, 6655146(0) swapouts.
# Networks网络:入口流量 in,出口流量 out。Disks:read磁盘读,written磁盘写。
Networks: packets: 22961127/8872M in, 25262557/4362M out. Disks: 6564652/128G read, 6301617/84G written.
# PID:进程号,COMMAND:程序名或者执行命令,%CPU:CPU占比,TIME:运行时长,TH:线程数量,WQ:io-wait等待IO数量,PPID:父进程ID,STATE:进程状态
PID    COMMAND      %CPU  TIME     #TH    #WQ  #PORTS MEM    PURG   CMPRS  PGRP  PPID  STATE
17975  iTerm2       25.3  06:47.68 7      4    343+   106M+  22M    19M-   17975 1     sleeping
151    WindowServer 22.5  10:36:59 16/1   6    3580+  707M+  348M-  80M+   151   1     running
815    �~A�~Z微� 20.9.6 0:13:39 94/3   2    25447+ 8+67M+ 2+M    628M   815   1    982 sleeping
223   �coreaudiod   9.4   44:00.51 9/1    4    505    21M    0B     10M    223   1     running
18953  top          8.4   00:04.66 1/1    0    28     7252K  0B     0B     18953 17982 running
0      kernel_task  6.7   03:01:47 217/8  0    0      295M-  0B     0B     0     0     running
8325   EasyConnect  5.6   02:40.11 30     1    361    55M+   72K    0B     8325  1     sleeping
15687  com.apple.Ap 3.5   01:03.82 3      2    78     900K   0B     0B     15687 1     sleeping
883    gamecontroll 3.2   40:47.93 3      2    87     2248K  0B     368K   883   1     sleeping
814    WeChat       3.0   88:35.76 53     12   1589+  377M+  9112K  165M   814   1     sleeping
108    wsdlpd       1.3   31:04.32 40     3    146    94M    0B     79M    108   1   leeping
1104   DLPHelperSer 1.0   08:42.41 6      2    92+    2908K+ 0B     1428K- 1104  1     sleeping
296    ESDaemonBund 0.9   44:08.64 8      3    33     82M    0B     18M    296   1     sleeping
85     JamfDaemon   0.9   18:36.32 3      2    77     57M    0B     38M    85    1     sleeping
818    wpsoffice    0.8   05:07.68 49     5    325    256M-  0B     209M-  818   1     sleeping

2.uptime:

代码语言:javascript
复制
$ uptime
15:17  up 3 days,  1:11, 2 users, load averages: 3.44 3.34 3.48
# 指标分别表示:
15:17 // 当前时间
up 3 days,  1:11 // 系统运行时间
2 users // 正在登录用户数
3.44 3.34 3.48 // 1分钟、5分钟、15分钟的平均负载

3. pidstat:

代码语言:javascript
复制
# 间隔1秒输出一组数据
$ pidstat 1
...
# UID:用户ID,PID:进程ID,%usr:用户态占比, %system:内核态占比,  %guest:运行虚拟机 CPU 使用率   %wait:io-wait指标,CPU:几号CPU,Command:程序名
04:36:24      UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
04:36:25        0      6882    1.00    3.00    0.00    0.00    4.00     0  docker-containe
04:36:25      101      6947    1.00    2.00    0.00    1.00    3.00     1  nginx

4.mpstat:

显示所有CPU的指标

代码语言:javascript
复制
# 显示所有CPU的指标,并在间隔5秒输出一组数据
$ mpstat -P ALL 5 1
Linux 4.15.0 (ubuntu)     09/22/18     _x86_64_    (2 CPU)
13:41:28     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
13:41:33     all    0.21    0.00   12.07   32.67    0.00    0.21    0.00    0.00    0.00   54.84
13:41:33       0    0.43    0.00   23.87   67.53    0.00    0.43    0.00    0.00    0.00    7.74
13:41:33       1    0.00    0.00    0.81    0.20    0.00    0.00    0.00    0.00    0.00   98.99

5. vmstat

存储相关的查看工具

代码语言:javascript
复制
# 每隔1秒输出1组数据
$ 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
0  0      0 7743608   1112  92168    0    0     0     0   52  152  0  1 100  0  0
 0  0      0 7743608   1112  92168    0    0     0     0   36   92  0  0 100  0  0

buff 和 cache 就是我们前面看到的 Buffers 和 Cache,单位是 KB。

bi 和 bo 则分别表示块设备读取和写入的大小,单位为块 / 秒。因为 Linux 中块的大小是 1KB,所以这个单位也就等价于 KB/s

6.dsstat:

代码语言:javascript
复制
# 间隔1秒输出10组数据
$ dstat 1 10
You did not select any stats, using -cdngy by default.
--total-cpu-usage-- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai stl| read  writ| recv  send|  in   out | int   csw
  0   0  96   4   0|1219k  408k|   0     0 |   0     0 |  42   885
  0   0   2  98   0|  34M    0 | 198B  790B|   0     0 |  42   138
  0   0   0 100   0|  34M    0 |  66B  342B|   0     0 |  42   135
  0   0  84  16   0|5633k    0 |  66B  342B|   0     0 |  52   177
  0   3  39  58   0|  22M    0 |  66B  342B|   0     0 |  43   144
  0   0   0 100   0|  34M    0 | 200B  450B|   0     0 |  46   147
  0   0   2  98   0|  34M    0 |  66B  342B|   0     0 |  45   134
  0   0   0 100   0|  34M    0 |  66B  342B|   0     0 |  39   131
  0   0  83  17   0|5633k    0 |  66B  342B|   0     0 |  46   168
  0   3  39  59   0|  22M    0 |  66B  342B|   0     0 |  37   134

7.查看中断

/proc/softirqs 提供了软中断的运行情况

/proc/interrupts 提供了硬中断的运行情况

代码语言:javascript
复制
# NET_RX 表示网络接收中断,而 NET_TX 表示网络发送中断
#TIMER:定时中断,SCHED:内核调度
$ cat /proc/softirqs
                    CPU0       CPU1
          HI:          0          0
       TIMER:     811613    1972736
      NET_TX:         49          7
      NET_RX:    1136736    1506885
       BLOCK:          0          0
    IRQ_POLL:          0          0
     TASKLET:     304787       3691
       SCHED:     689718    1897539
     HRTIMER:          0          0
         RCU:    1330771    1354737

8.execsnoop:是一个专为短时进程设计的工具

代码语言:javascript
复制
# 按 Ctrl+C 结束
$ execsnoop
PCOMM            PID    PPID   RET ARGS
sh               30394  30393    0
stress           30396  30394    0 /usr/local/bin/stress -t 1 -d 1
sh               30398  30393    0
stress           30399  30398    0 /usr/local/bin/stress -t 1 -d 1
sh               30402  30400    0
stress           30403  30402    0 /usr/local/bin/stress -t 1 -d 1
sh               30405  30393    0
stress           30407  30405    0 /usr/local/bin/stress -t 1 -d 1
...

https://github.com/brendangregg/perf-tools/blob/master/execsnoop

9. tcpdump

代码语言:javascript
复制
# -i eth0 只抓取eth0网卡,-n不解析协议名和主机名
# tcp port 80表示只抓取tcp协议并且端口号为80的网络帧
$ tcpdump -i eth0 -n tcp port 80
15:11:32.678966 IP 192.168.0.2.18238 > 192.168.0.30.80: Flags [S], seq 458303614, win 512, length 0
...

三、CPU问题定位顺序

这些指标都是描述系统的 CPU 性能,它们不会是完全孤立的,很多指标间都有一定的关联,下面的图可以给个很好的指导

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-04-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 灰子学技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档