本篇文章为大家展示了怎么在windows环境找出java程序中cpu占用高的线程,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
1。找到java进程对应的pid。
找pid的方法是:打开任务管理器,然后点击“查看“菜单,然后点击“选择列“,把pid勾上,然后就可以在任务管理器里面看到所有进程的pid值了。(也可以用第三步中提到的工具直接查看)
2。然后把java进程导出快照。直接运行命令。
jstack -l 31372,在c:/31372。堆栈
我这里是指定把java所有的信息导出到c盘的31372.堆栈的文件里。
3。在windows下只能查看进程的cpu占用率,要查看线程的cpu占用率要借助其他的工具,我这里用的是微软提供的Process Explorer v15.3
下载地址http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx
下载完后解压运行
右键点击需要查看的进程——属性
4。然后选择线程选项卡,找到占用cpu的线程的tid,比如我这里是31876的线程
5。把pid转换成16进制,我这里直接用系统自带的计算器转换,置于为什么要转换,是因为先前用jstack导出的信息里面线程对应的tid是16进制的。
最后得到的线程pid的16进制的值为7 c84
6。31372年在c盘的。堆栈文件中查找7 c84
由于是我的程序已经该过了,这里没有异常的东西,所以这里没有什么异常内容。
我的问题没解决之前,找到到这里的内容为:
“Thread-23",一家=6,tid=0 x03072400 nid=0 x1b68 runnable [0 x0372f000] ,java.lang.Thread.State:可运行 ,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 某个浏览器: ,安康;没有
于是打开t com.horn.util.MyEncrypt.encode (MyEncrypt.java: 17)
分析了下代码,问题找到了。
问题代码为:
//, 100 - 999年的随机数 int random =, (int), (math . random (), *, 1000); while (random & lt;, 100), {=,,random  random *, 10; }
这样票眼看是没问题
当时我写这段代码也没注意
关键在于math . random()的取值范围是大于0小于1是吧?
如果math . random()的值为0.00009以下……就成死循环了…
现在修改为了
//, 100 - 999年的随机数 int random =, new 随机().nextInt (900), +, 100;
上述内容就是怎么在windows环境找出java程序中cpu占用高的线程,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。