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飙升。

 

 

    

posted @ 2021-10-26 10:59  愤青程序猿  阅读(1238)  评论(0编辑  收藏  举报