怎么使用jstack精确找到异常代码

1.代码demo
    //一个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());           
                 }       
             }   
         }
    }

2.将上述代码打成Jar.在Linux上执行上述代码
    * 命令:java -jar JavaStudy.jar
    
    
3.找到CPU利用率持续比较高的进程,获取进程号,此处PID为3036

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

    * 命令:ps p 3036 -L -o pcpu,pid,tid,time,tname,cmd
    

5.将获取的线程号(十进制数)转换成十六进制

    * 命令:printf "%x\n"  3046

6.查看进程PID为3036中 nid为0xb46的线程信息

    * 命令:jstack -l 3036
    
7. 总结:

    * 可以看到jstack命令的输出结果是相当准确的    
    * 显示耗CPU比较高的代码与实际情况相同,都是第13行。

 

参考《 http://jingyan.baidu.com/article/4f34706e3ec075e387b56df2.html 》

 

posted @ 2017-07-17 15:58  PoleStar  阅读(520)  评论(0编辑  收藏  举报