CPU--使用率

二龙1年前技术文章246

一、CPU和任务统计信息

查询/proc/stat

    • 第一行表示所有CPU的累加

    • 其他列表示不同场景下CPU的累加节拍数,单位:USER_HZ10ms

➜  ~ cat /proc/stat|grep ^cpu 
cpu  135307 6855 165552 1632799 2751 0 723 0 0 0 
cpu0 16158 843 20907 1406454 2371 0 533 0 0 0 
cpu1 16261 673 21406 32408 68 0 117 0 0 0 
cpu2 17232 888 20364 32294 52 0 41 0 0 0 
cpu3 16700 988 20565 32273 38 0 8 0 0 0 
cpu4 17055 1003 20636 32286 39 0 10 0 0 0 
cpu5 16702 832 20515 32345 54 0 5 0 0 0 
cpu6 17635 843 20566 32349 55 0 3 0 0 0 
cpu7 17561 782 20590 32388 71 0 3 0 0 0

二、怎么查看CPU使用率

top

    • 显示了系统总体的CPU和内存使用情况,以及各个进程的资源使用情况

    • 需要关注的内容

    • us:用户态CPU时间

    • sy:内核态CPU时间

    • ni:低优先级用户态CPU时间

    • id:空闲时间

    • wa:等待I/O的CPU时间

    • hi:处理硬中断的CPU时间

    • si:处理软中断的CPU时间

    • st:当系统运行在虚拟机中的时候,被其他虚拟机占用的CPU时间

pidstat

    • 需要关注的内容

    • %usr:用户态CPU使用率

    • %system:内核态CPU使用率

    • %guest:运行虚拟机CPU使用率

    • %wait:等待CPU使用率

    • %CPU:总的CPU使用率

➜  ~ pidstat 1 5
Linux 4.15.0-29deepin-generic (gugoole-PC)  2018年11月30日     _x86_64_    (8 CPU)
13时36分14秒   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
13时36分15秒     0         8    0.00    0.99    0.00    0.00    0.99     5  rcu_sched
13时36分15秒     0      3375    1.98    0.00    0.00    0.99    1.98     2  Xorg
13时36分15秒     0      3546    0.00    0.99    0.00    0.00    0.99     1  irq/150-nvidia
13时36分15秒  1000      4861    0.99    0.00    0.00    0.00    0.99     2  startdde
13时36分15秒  1000      5034    0.99    0.00    0.00    0.00    0.99     7  deepin-wm
13时36分15秒  1000     12563    0.99    0.00    0.00    0.00    0.99     4  deepin-terminal
  • 实际计算方法

image.png

三、CPU使用率过高怎么办?

perf top采样

    • 需要关注的内容

    • Samples:采样数

    • event:事件类型

    • Event count:事件总数量

    • Overhead:指该符号的性能事件在所有采用中的比例

    • Shared:指该函数或指令所在的动态共享对象,如:内核、进程名、动态链接库名等

    • Object:动态共享对象的类型

    • [.]表示用户空间的可执行程序、或者动态链接库

    • [k]表示内核空间

    • Symbol:表示符号名,即函数名,当函数未命名时用16进制地址表示

Samples: 2K of event 'cycles:ppp', Event count (approx.): 1330995812
Overhead  Shared Object                       Symbol
   9.20%  [kernel]                            [k] module_get_kallsym
   3.96%  [kernel]                            [k] vsnprintf
   2.73%  [kernel]                            [k] format_decode
   2.73%  perf                                [.] 0x00000000001ea373
   1.89%  [kernel]                            [k] number
   1.88%  [kernel]                            [k] kallsyms_expand_symbol.constprop.1
   1.69%  perf                                [.] 0x00000000001f6368
   1.69%  [kernel]                            [k] memcpy_erms
   1.43%  perf                                [.] 0x00000000001f77d0
   1.34%  libc-2.27.so                        [.] __libc_calloc
   1.24%  [kernel]                            [k] string

perf record

    • 离线保存系统的性能信息,按Ctrl+C终止采样

perf report

    • 解析perf record保存的采样信息

Samples: 3K of event 'cycles:ppp', Event count (approx.): 1778811422
Overhead  Command          Shared Object                  Symbol                            
  28.61%  swapper          [kernel.kallsyms]              [k] intel_idle                    
   4.44%  Xorg             [kernel.kallsyms]              [k] pci_conf1_read                
   2.35%  kworker/1:2      [kernel.kallsyms]              [k] _nv029827rm                   
   2.05%  Xorg             [kernel.kallsyms]              [k] _nv029827rm                   
   1.76%  deepin-wm        [kernel.kallsyms]              [k] pci_conf1_read                
   1.61%  deepin-wm        [kernel.kallsyms]              [k] _nv029827rm                   
   1.09%  irq/150-nvidia   [kernel.kallsyms]              [k] _nv029827rm                   
   1.08%  deepin-wm        [kernel.kallsyms]              [k] syscall_return_via_sysret     
   0.91%  swapper          [unknown]                      [k] 0000000000000000              
   0.71%  Xorg             [kernel.kallsyms]              [k] _nv018294rm                   
   0.41%  swapper          [kernel.kallsyms]              [k] update_load_avg               
   0.33%  Xorg             [vdso]                         [.] 0x0000000000000977
  • 一般使用的时候会加上-g参数以开启调用关系的采样

Samples: 36K of event 'cycles:ppp', Event count (approx.): 7290912532
  Children      Self  Shared Object                                        Symbol           
-   15.23%     1.57%  [unknown]                                            [k] 0000000000000000                                                                            
   - 7.58% 0                                                                                
+   12.19%     0.14%  [kernel]                                            [k] entry_SYSCALL_64_after_hwframe                                                              
-   12.01%     0.28%  [kernel]                                            [k] do_syscall_64
   - 3.03% do_syscall_64                                                                    
-    8.65%     0.16%  [kernel]                                            [k] do_idle      
   - 1.75% do_idle                                                                          
+    4.22%     0.02%  [kernel]                                            [k] call_cpuidle 
+    4.09%     0.22%  [kernel]                                            [k] cpuidle_enter_state                                                                         
+    4.01%     0.02%  [kernel]

四、小结

    • us与ni高说明用户态进程占用较多的CPU,所以应该着重排查进程的性能问题

    • sy高说明内核态占用较多的CPU,所以应该着重排查内核线程或者系统调用的性能问题

    • wa高说明等待I/O的时间比较长,所以应该着重排查系统存储是不是出现了I/O问题

    • hi和si高说明硬中断 或者软中断的处理程序占用了较多CPU,应该着重排查内核中的中断服务程序

相关文章

Linux运维工具

1.1 查看进程占用带宽情况 - NethogsNethogs 是一个终端下的网络流量监控工具可以直观的显示每个进程占用的带宽。1.2 硬盘读取性能测试 - IOZoneIOZone 是一款 Linu...

内存--模拟内存打满

1 tmpfs介绍tmpfs是一种虚拟内存文件系统,正如这个定义它最大的特点就是它的存储空间在VM里面     VM是由linux内核里面的vm子系统管理的东...

CPU--平均负载

1、原理概述平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。   * ...

CPU--上下文切换

CPU--上下文切换

一、概述1、Linux 是一个多任务操作系统,它支持远大于 CPU 数量的任务同时运行。当然,这些任务实际上并不是真的在同时运行,而是因为系统在很短的时间内,将 ...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。