对于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技术