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跟踪异常代码
  • 相关阅读:
    图片自动播放
    选项卡切换
    jquery实现全选、反选、不选
    JQuery $()后面的括号里的内容什么时候加引号,什么时候不加
    ajax跨域jsonp
    加班与效率
    提问的智慧
    程序员要勇于说不
    编程从业五年的十四条经验,句句朴实
    成为高效程序员的7个重要习惯
  • 原文地址:https://www.cnblogs.com/AmilyWilly/p/5981591.html
Copyright © 2011-2022 走看看