CPU性能篇 -- CPU使用率
CPU性能篇 -- CPU使用率
1. 什么是CPU使用率
CPU使用率, 指除了空闲时间外的其他时间占总CPU时间的百分比。
CPU使用率 = 1 - 空闲时间/总CPU时间
实际上,一般是取单位时间内的CPU使用率,即间隔一段时间的两次值,作差后,在计算出这段时间内的平均CPU使用率。
CPU使用率 = 1 - (空闲时间new-空闲时间old)/(总空闲时间new-总空闲时间old) 
2. 关联指标
| 名称 | 含义 | 备注 | 
|---|---|---|
| user(us) | 用户态CPU时间 | 不包括nice时间,但包括guest时间 | 
| nice(ni) | 低优先级用户态CPU时间 | 进程的nice值调整为1-19之间的CPU时间 | 
| system(sys) | 内核态CPU时间 | |
| idle(id) | 空闲时间 | 不包括IO等待的时间 | 
| iowait(wa) | 等待IO的CPU时间 | |
| irq(hi) | 硬中断的CPU时间 | |
| softirq(si) | 软中断的CPU时间 | |
| steal(st) | 系统运行虚拟机时,被其他虚拟机占用的CPU时间 | |
| guest | 虚拟化运行其他操作系统的时间 | 运行虚拟机的CPU时间 | 
| guest_nice(gnice) | 低优先级运行虚拟机的时间 | 
3.查看CPU使用率
常用的三个命令:
ps,  pidstat, top
4.CPU使用率过高怎么办
perf + GDB
perf适合用来分析进程的CPU问题。
perf分析CPU性能问题的两种方法:
- 
perf top 
 perf top可以实时显示占用CPU时钟最多的函数或者指令,因此用来查询热点函数。
 输出的第一行包含三个信息:
 Samples:采样数;event:事件类型;Event count:事件总数
 之后的四列数据含义为:Overhead 该符号的性能事件在所有采样中的比例 Shared 该函数或指令所在的动态共享对象(Dynamic Shared Object),如内核,进程名,动态链接库名,内核模块名 Object 动态共享对象的类型,[.]表示用户空间的可执行程序,[k]表示内核空间。 Symbol 符号名,也就是函数名。当函数未知时,用16进制地址来表示。 
- 
perf record, perf report 
 perf record: 提供保存数据的功能,perf report:解析展示。
 -g参数开启调用关系的采样,方便根据调用链来分析性能问题。
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号