linux 高性能学习笔记4
对于cup异常使用,无法找到原因的情况分析思路
分析思路
- 使用top 观察cup使用情况,是否能一眼看出使用cup高的进程
- 发现整体非常高,但是每个进程用的却非常少时(多半是有一个瞬时进程不停的启动销毁)
- 使用pidstat 观察进程使用cup情况,也没有发现异常高的程序
//所有进程使用cpu情况
pidstat 1
- 观察top 的task情况,检查各种状态下的任务情况如果R状态的任务过多时,要考虑是否有大量进程打开
- top b 命令打开高亮
- shift+< > 切换到S列观察运行中的程序
- R 改变排序状态
- 发现异常运行的进程使用pidstat 查看cup使用情况
//每隔一秒打印指定进程cpu使用情况
pidstat -p pid 1
- 发现使用当前进程没有cpu使用信息,证明进程已经销毁了(如果怀疑有工具有问题,可以使用其他工具进行确认)
- 同时发现此进程又使用其他的进程id启动了,可能有如下两种原因
- 进程不断的崩溃重启
- 进程是短时进程,执行时间很短马上完成
- 使用pstree观察调用链,找到上级调用
//查看指定进程调用链
pstree | grep stress
- 分析上级调用代码,发现异常部分
- 最后可以用perf top 来记录系统cup 使用情况
//记录cup 使用情况
perf record -g
//查看报告
perf report
- 额外工具 execsnoop 工具可以查看短时进程情况 使用ftrace技术