zoukankan      html  css  js  c++  java
  • Windows如何使用jstack跟踪异常代码

    维护服务器时,会出现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());           

                      }       

                   }    

              }

          }

      Windows如何使用jstack跟踪异常代码
    2.  

      执行上述代码,

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

      Windows如何使用jstack跟踪异常代码
    3.  

      打开任务管理,

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

      Windows如何使用jstack跟踪异常代码
    4.  

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

      Windows如何使用jstack跟踪异常代码
    5.  

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

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

      Windows如何使用jstack跟踪异常代码
      Windows如何使用jstack跟踪异常代码
    6.  

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

      转换为0x17E8(16进制)

      Windows如何使用jstack跟踪异常代码
      Windows如何使用jstack跟踪异常代码
    7.  

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

      找到线程号为0x17E8的线程

      命令:

      jstack -l  7064

      Windows如何使用jstack跟踪异常代码
    8. 8

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

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

      Windows如何使用jstack跟踪异常代码
  • 相关阅读:
    递归与尾递归总结
    JAVA基础——链表结构之双端链表
    JAVA基础——链表结构之单链表
    JAVA基础——集合Iterator迭代器的实现
    JAVA基础——Date和Calendar类
    JAVA基础——Native关键字
    Java基础——从数组到集合之间关键字的区别!!!!
    JAVA基础——集合类汇总
    Web前端性能优化——提高页面加载速度
    vue 与 angular 的区别
  • 原文地址:https://www.cnblogs.com/AmilyWilly/p/5981591.html
Copyright © 2011-2022 走看看