• 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跟踪异常代码
  • 相关阅读:
    学习记录18
    学习记录17
    学习记录16
    小白的心酸连网历程
    学习记录15
    学习记录14
    学习记录13
    学习记录12
    学习记录10
    语法糖
  • 原文地址:https://www.cnblogs.com/AmilyWilly/p/5981591.html
Copyright © 2020-2023  润新知