windows下揪出java程序占用cpu很高的线程

Posted update_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windows下揪出java程序占用cpu很高的线程相关的知识,希望对你有一定的参考价值。

1.找到java进程对应的pid。通过任务管理器。linux---top

2.然后把java进程导出快照。直接运行命令。stack -l 31372 > c:/31372.stack  

3.在windows下只能查看进程的cpu占用率,要查看线程的cpu占用率要借助其他的工具,我这里用的是微软提供的 Process Explorer v15.3

                                                                                                    右键点击需要查看的进程---properties 

linux下先输入top,然后再按shift+h 或“H”,此时打开的是线程视图,pid为线程号

4.然后选择 Threads 选项卡,找到占用cpu的线程的tid,比如我这里是 31876 的线程

5.把pid转换成16进制,我这里直接用系统自带的计算器转换,置于为什么要转换,是因为先前用jstack导出的信息里面线程对应的tid是16进制的。

cmd---calc---计算器左上角选择程序员,可进制转换 。最后得到的线程pid的16进制的值为 7C84 

6.在 c盘的31372.stack文件中查找 7C84

Thread-23" prio=6 tid=0x03072400 nid=0x1b68 runnable [0x0372f000]  

   java.lang.Thread.State: RUNNABLE  

   at com.horn.util.MyEncrypt.encode(MyEncrypt.java:17)  

 at com.horn.common.OrderUtil.hisExp(OrderUtil.java:228)  

 at com.horn.util.MsgManage.receiveMsg(MsgManage.java:961)  

   at com.horn.util.PollMessageThread.run(PollMessageThread.java:74)  

   Locked ownable synchronizers:      - None  

以上是关于windows下揪出java程序占用cpu很高的线程的主要内容,如果未能解决你的问题,请参考以下文章

Linux排查Java程序占用CPU很高的解决办法

为啥java.exe进程总是占用很高的CPU?~~江湖救急啊!

java 多线程 cpu 占用率高的问题

mac 中kernel task 内存占用很高的问题

Java--关于cpu占用解决方案

[转]生产环境中程序占用cpu过高的程序的排查办法