Skip to content

cpu性能分析

cpu占用率过高分析

参考链接

分析方面

  • 业务逻辑线程是否陷入死循环或者代码不够优化导致占用较高cpu

  • 是否存在内存泄露导致频繁GC占用较高cpu

使用top+jstack分析

分析openjdk docker容器中的java应用,需要在容器中安装top命令apt install procps,其他步骤和非容器环境一致。

确定占用cpu高的java进程id-c显示进程启动的命令行命令

sh
top -c

确定占用cpu高的java线程,-H表示线程模式,-p表示指定进程id,能够通过线程名称大概判断什么逻辑在消耗cpu资源

sh
top -H -p [进程id]

转换上面获取的线程id为16进制显示,因为jstack需要使用线程的16进制id

sh
printf "%x\n" [线程id]

使用jstack打印指定线程id的调用栈快照,-A表示grep匹配行向下打印30行

sh
./jstack [进程id] | grep [线程id 16进制] -A 30

使用arthas分析

  • 使用arthasthreadmonitortrace命令分析cpu高使用率。具体请参考
  • 如果需要分析docker容器中的java应用,需要在docker容器内安装并运行arthas