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分析
- 使用
arthas的thread、monitor、trace命令分析cpu高使用率。具体请参考 - 如果需要分析
docker容器中的java应用,需要在docker容器内安装并运行arthas