zoukankan      html  css  js  c++  java
  • 怎么使用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
    "  3046
    
    6.查看进程PID为3036中 nid为0xb46的线程信息
    
        * 命令:jstack -l 3036
        
    7. 总结:
    
        * 可以看到jstack命令的输出结果是相当准确的    
        * 显示耗CPU比较高的代码与实际情况相同,都是第13行。

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

  • 相关阅读:
    文件操作
    字典的相关函数
    列表相关操作/列表的相关函数
    字符串相关操作/字符串相关函数
    局部变量 与 全局变量
    函数名的使用
    函数的返回值 return
    命名关键字
    收集参数
    默认形参 与 关键字实参的区别
  • 原文地址:https://www.cnblogs.com/polestar/p/7195844.html
Copyright © 2011-2022 走看看