您的位置:首页 > Web前端 > JavaScript

Jstack方法

2016-03-31 17:02 609 查看
维护服务器时,会出现java进程在CPU、内存、硬盘上总是出现异常情况。

如何找到是哪些代码出现这些异常呢?

本文使用jstack来实现这个需求


工具/原料

java

jstack

ProcessExplorer

procexp


方法/步骤

1

先写一段代码来模拟一个耗CPU的线程

代码:

package chapter1;

public class FindJavaThreadInTaskManager {

public static void main(String[] args) {

Thread thread = new Thread(new Worker());

thread.start();

}

static class Worker implements Runnable {

@Override

public void run() {

while (true) {

System.out.println("Thread Name:" + Thread.currentThread().getName());

}

}

}

}





2执行上述代码,

模拟一个CPU和IO利用率都高线程





3

打开任务管理,

此例中,CPU利用率比较高java进程ID为7064





4

使用ProcessExplorer找到ID号为7064的进程





5

使用ProcessExplorer查看进程ID为7064的属性信息

在Thread标签找到CPU利用率的线程信息,TID为6120(10进制)









6

将CPU利用率高的线程ID 6120(10进制)

转换为0x17E8(16进制)













7

使用jstack查看进程7064的线程信息。

找到线程号为0x17E8的线程

命令:

jstack -l 7064





8

查看第13行的代码信息,与实际情况相符。

至此,找到引发CPU利用率高的代码



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: