怎么在windows环境找出java程序中cpu占用高的线程

  介绍

本篇文章为大家展示了怎么在windows环境找出java程序中cpu占用高的线程,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

1。找到java进程对应的pid。

找pid的方法是:打开任务管理器,然后点击“查看“菜单,然后点击“选择列“,把pid勾上,然后就可以在任务管理器里面看到所有进程的pid值了。(也可以用第三步中提到的工具直接查看)

怎么在windows环境找出java程序中cpu占用高的线程

2。然后把java进程导出快照。直接运行命令。

jstack  -l  31372,在c:/31372。堆栈

怎么在windows环境找出java程序中cpu占用高的线程

我这里是指定把java所有的信息导出到c盘的31372.堆栈的文件里。

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

下载地址http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

下载完后解压运行

怎么在windows环境找出java程序中cpu占用高的线程

右键点击需要查看的进程——属性

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

怎么在windows环境找出java程序中cpu占用高的线程

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

怎么在windows环境找出java程序中cpu占用高的线程

怎么在windows环境找出java程序中cpu占用高的线程

怎么在windows环境找出java程序中cpu占用高的线程

最后得到的线程pid的16进制的值为7 c84

6。31372年在c盘的。堆栈文件中查找7 c84

怎么在windows环境找出java程序中cpu占用高的线程

由于是我的程序已经该过了,这里没有异常的东西,所以这里没有什么异常内容。

我的问题没解决之前,找到到这里的内容为:

“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占用高的线程,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

怎么在windows环境找出java程序中cpu占用高的线程