高手是怎么使用jstack精确找到异常代码的

2025-10-24 07:30:19

1、一个CPU密集型线程的demo:

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());           

             }       

         }   

     }

}

高手是怎么使用jstack精确找到异常代码的

2、将上述代码打成Jar。

在Linux上执行上述代码

命令:

java -jar JavaStudy.jar

高手是怎么使用jstack精确找到异常代码的

3、找到CPU利用率持续比较高的进程,获取进程号,此处PID为3036

命令:

top

高手是怎么使用jstack精确找到异常代码的

4、找到上述进程中,CPU利用率比较高的线程号TID(十进制数),此处为3046

命令:

ps p 3036 -L -o pcpu,pid,tid,time,tname,cmd

高手是怎么使用jstack精确找到异常代码的

5、将获取的线程号(十进制数)转换成十六进制,此处为0xb46

命令:

printf "%x\n"  3046

高手是怎么使用jstack精确找到异常代码的

6、查看进程PID为3036中

nid为0xb46的线程信息。

命令:

jstack -l 3036

高手是怎么使用jstack精确找到异常代码的

7、总结:

可以看到jstack命令的输出结果是相当准确的:

显示耗CPU比较高的代码与实际情况相同,都是第13行。

放心的用吧。

Enjoy youself!

高手是怎么使用jstack精确找到异常代码的

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢