• 怎么使用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 》

  • 相关阅读:
    夯实Java基础(六)——包装类
    JavaWeb:Cookie
    JavaWeb:HttpServletResponse
    JavaWeb:ServletResponse
    JavaWeb:HttpServletRequest
    JavaWeb:ServletRequest(二)
    JavaWeb:ServletRequest(一)
    JavaWeb:HttpServlet
    JavaWeb:GenericServlet
    Spring:Spring Cloud 2020 年维护路线图
  • 原文地址:https://www.cnblogs.com/polestar/p/7195844.html
Copyright © 2020-2023  润新知