性能監控之可視化故障處理工具 JHSDB


1.JHSDB簡介

  JHSDB是一款基於服務性代理實現的進程外調試工具。服務性代理是HotSpot虛擬機中一組用於映射Java虛擬機運行信息的,主要基於Java語言實現的API集合。

2.JHSDB啟動

   2.1 啟動示例代碼

package com.ryj.hotspot;

import java.io.IOException;

import org.omg.CORBA.ObjectHolder;

public class JHSDB_Test {
    static class Test {
        static ObjectHolder staticObj = new ObjectHolder();
        ObjectHolder instanceObj = new ObjectHolder();

        void foo() {
            ObjectHolder localObject = new ObjectHolder();
            while (true) {
                try {
                    Thread.sleep(6000 * 1000l);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }

    public static void main(String[] args) {
        Test test = new JHSDB_Test.Test();
        test.foo();
    }
}

    2.2 找到java進程號

C:\Program Files\Java\jdk1.8.0_144\bin>jps -l
8400

     2.3 啟動JHSDB

C:\Program Files\Java\jdk1.8.0_144\lib>java -cp .\sa-jdi.jar sun.jvm.hotspot.HSDB

     如果出現報錯信息,需要將缺少的文件移動到該lib目錄下

    2.4 在打開的窗口中輸入進程號

 

 

  • Inspector:查看 OOP 和 Klass 對象信息,雙擊線程名稱也能夠查看此信息
  • Stack Memory:線程棧內存
  • Show Java Stack Traces:顯示線程堆棧信息
  • Show Thread Infomation:顯示線程信息
  • Find Crashes  

3.JHSDB實戰

  3.1 查看堆信息

  可以通過Tools -> Heap Parameters 查看或通過Windows -> Console執行命令

hsdb> universe
Heap Parameters:
ParallelScavengeHeap [ PSYoungGen [ eden =  [0x00000000d5d80000,0x00000000d5f73368,0x00000000d7e00000] , from =  [0x00000000d8300000,0x00000000d8300000,0x00000000d8800000] , to =  [0x00000000d7e00000,0x00000000d7e00000,0x00000000d8300000]  ] PSOldGen [  [0x0000000081800000,0x0000000081800000,0x0000000086d80000]  ]  ]

     3.2 查找對象內存地址

hsdb> scanoops 0x00000000d5d80000 0x00000000d8800000 com.ryj.hotspot.JHSDB_Test$ObjectHolder

    由於本地環境 scanoops命令報錯,后續參考  https://www.bilibili.com/video/av95220376/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM