1,方法论,带着这样的思路来思考
What:现象是什么样的
 When:什么时候发生
 Why:为什么会发生
 Where:哪个地方发生的问题
 How much:耗费了多少资源
 How to do:怎么解决问题
2,CPU
如果你是做应用运维,针对应用程序,我们通常关注的是内核CPU调度器功能和性能。
 线程的状态分析主要是分析线程的时间用在什么地方,而线程状态的分类一般分为:
- on-CPU:执行中,执行中的时间通常又分为用户态时间user和系统态时间sys
- off-CPU:等待下一轮上CPU,或者等待I/O、锁、换页等等,其状态可以细分为可执行、匿名换页、睡眠、锁、空闲等状态。
- 如果大量时间花在CPU上,对CPU的剖析能够迅速解释原因;如果系统时间大量处于off-cpu状态,定位问题就会费时很多。但是仍然需要清楚一些概念:处理器核硬件线程CPU内存缓存时钟频率每指令周期数CPI和每周期指令数IPCCPU指令使用率用户时间/内核时间调度器运行队列抢占多进程多线程字长;
| 工具 | 描述 | 
|---|---|
| uptime | 平均负载 | 
| vmstat | 包括系统范围的CPU平均负载 | 
| mpstat | 查看所有CPU核信息 | 
| top | 监控每个进程CPU用量 | 
| sar -u | 查看CPU信息 | 
| pidstat | 每个进程cpu用量分解 | 
| perf | cpu剖析和跟踪,性能技术统计 | 
- top查看系统cpu使用情况
- mpstat -P ALL 1查看所有cpu核信息
- vmstat 1查看cpu使用情况以及平均负载
- pidstat -u 1 -p pid进程cpu的统计信息
- perf top -p pid -e cpu-clock跟踪进程内部函数级cpu使用情况
参考文献:https://mp.weixin.qq.com/s/DhSzjy3J-w2X3Vz7cXd1nw