windows系统下排查Java项目cpu过高原因
问题描述:
我们公司是java做服务端,做的电脑客户端软件,最近一次更新,测试时发现之前cpu一直是在4-5使用率,新版本有时会飙升到30%~40%,肯定是存在问题
使用工具:
步骤1:定位项目进程
打开任务管理
步骤2:使用jdk自带的一个jstack命令导出线程日志
命令: jstack 88400 > D:/jstack/cc.log 88400:任务管理里的项目PID,右侧是将进程保存到本地,供后续排查问题
注意:
1、文件夹要先创建好,
2、如果出现拒绝访问,则需要使用管理员身份运行cmd
3、如果出现jstack不是内部或外部命令,则说明jdk的环境变量设置有问题,在这就不多说了
步骤3:使用Process Explorer工具,下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/process-explorer
找到步骤一中的PID对应的进程,右键Properties...选项
找到CPU使用率高的TID,通过jstack工具导出的信息中线程TID是十六进制的,需要转换进制
将16进制到之前导出的线程记录文件中查询,可以看到我自定义的线程名以及代码位置,可以追踪到具体业务逻辑进行排查问题
我之前的问题是开了线程池处理一个队列里的数据,当队列无数据时没有休眠等待,导致线程一直再跑,CPU飙升。