CPU--使用率

二龙2年前技术文章479

一、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,应该着重排查内核中的中断服务程序

相关文章

CPU--上下文切换

CPU--上下文切换

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

寻找CPU使用率高进程方法

寻找CPU使用率高进程方法

背景节点报CPU使用率高,需要定位是什么进程占用CPU使用率高。CPU使用率持续较高在对应节点使用 “top”命令,然后键盘输入“P”,即按照CPU使用率排序进程。执行ps -ef | grep &l...

CPU--平均负载

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

发表评论    

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