1. 背景
有时候会遇到一些疑难杂症,并且监控插件并不能一眼立马发现问题的根源。这时候就需要登录服务器进一步深入分析问题的根源。那么分析问题需要有一定的技术经验积累,并且有些问题涉及到的领域非常广,才能定位到问题。所以,分析问题和踩坑是非常锻炼一个人的成长和提升自我能力。如果我们有一套好的分析工具,那将是事半功倍,能够帮助大家快速定位问题,节省大家很多时间做更深入的事情。
2. 说明
本篇文章主要介绍各种问题定位的工具以及会结合案例分析问题。
3. 分析问题的方法论
-
What-现象是什么样的 -
When-什么时候发生 -
Why-为什么会发生 -
Where-哪个地方发生的问题 -
How much-耗费了多少资源 -
How to do-怎么解决问题
4. cpu
4.1 说明
针对应用程序,我们通常关注的是内核CPU调度器功能和性能。
线程的状态分析主要是分析线程的时间用在什么地方,而线程状态的分类一般分为:
-
on-CPU:执行中,执行中的时间通常又分为用户态时间user和系统态时间sys。
-
off-CPU:等待下一轮上CPU,或者等待I/O、锁、换页等等,其状态可以细分为可执行、匿名换页、睡眠、锁、空闲等状态。
-
处理器 -
核 -
硬件线程 -
CPU内存缓存 -
时钟频率 -
每指令周期数CPI和每周期指令数IPC -
CPU指令 -
使用率 -
用户时间/内核时间 -
调度器 -
运行队列 -
抢占 -
多进程 -
多线程 -
字长
4.2 分析工具
-
uptime,vmstat,mpstat,top,pidstat 只能查询到cpu及负载的的使用情况。 -
perf可以跟着到进程内部具体函数耗时情况,并且可以指定内核函数进行统计,指哪打哪。
4.3 使用方式
//查看系统cpu使用情况top //查看所有cpu核信息mpstat -P ALL 1 //查看cpu使用情况以及平均负载vmstat 1 //进程cpu的统计信息pidstat -u 1 -p pid //跟踪进程内部函数级cpu使用情况 perf top -p pid -e cpu-clock