CPU--使用率
一、CPU和任务统计信息
查询/proc/stat
第一行表示所有CPU的累加
其他列表示不同场景下CPU的累加节拍数,单位:USER_HZ即10ms
➜ ~ 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
实际计算方法
三、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,应该着重排查内核中的中断服务程序