[JDK工具]虛擬機性能監控與故障處理工具

1 前言

不會程序調優的程序員不是一個好程序員。

給一個系統定位問題的時候,知識、經驗是關鍵基礎,數據是依據,工具是運用知識處理數據的手段。這裏說的數據包括:運行日誌、異常堆棧、GC日誌、線程快照(threaddump/javacore文件)、堆轉儲快照(heapdump/hprof文件)等。

2 JDK的命令行工具

我們熟知的JDK的bin目錄中有“java”、“javac”命令。
除此之外,還有一些工具,對於我們堅實虛擬機和故障處理非常有用,如下表:
在這裏插入圖片描述

2.1 javap:分析java彙編指令

通過javap命令可以查看一個java類反彙編、常量池、變量表、指令代碼行號表等等信息。
一般常用的是-v -l -c三個選項。
javap -v classxx,不僅會輸出行號、本地變量表信息、反編譯彙編代碼,還會輸出當前類用到的常量池等信息。
javap -l 會輸出行號和本地變量表信息。
javap -c 會對當前class字節碼進行反編譯生成彙編代碼。

2.2 jps:虛擬機進程狀況工具

常用:
jps -l
jps -l -v

命令格式:jps [options] [hostid]
Option參數:

-l : 輸出主類全名或jar路徑
-q : 只輸出LVMID
-m : 輸出JVM啓動時傳遞給main()的參數
-v : 輸出JVM啓動時顯示指定的JVM參數	

2.3 jstat:虛擬機統計信息監視工具

是用於監視虛擬機運行時狀態信息的命令,它可以顯示出虛擬機進程中的類裝載、內存、垃圾收集、JIT編譯等運行數據。
常用命令:jstat -gc 1262jstat -class 11589jstat -compiler 1262jstat -gccapacity 1262

2.4 jinfo:Java配置信息工具

實時查看和調整虛擬機運行參數。
之前的jps -v只能查看到顯示指定的參數,如果想要查看未被顯示指定的參數的值就要使用jinfo口令。
命令:jinfo 3796

2.5 jmap:Java內存映像工具

命令用於生成堆轉儲快照(一般稱爲heapdump 或者dump文件),如果不使用這個命令,還可以使用
-XX:+HeapDumpOnOutOfMemoryError參數來讓虛擬機出現OOM的時候·自動生成dump文件。
jmap不僅能生成dump文件,還可以查詢finalize執行隊列、Java堆和永久代的詳細信息,如當前使用率、當前使用的是哪種收集器等。
常用:jmap -dump:format=b,file=eclipse.bin 3500

2.6 jhat:虛擬機堆轉儲快照分析工具

jhat命令與jmap搭配使用,來分析jmap生成的堆轉儲快照。
常用:jhat eclipse.bin

2.7 jstack:Java堆棧跟蹤工具

jstack用於生成java虛擬機當前時刻的線程快照。線程快照是當前java虛擬機內每一條線程正在執行的方法堆棧的集合,生成線程快照的主要目的是定位線程出現長時間停頓的原因,如線程間死鎖、死循環、請求外部資源導致的長時間等待等。 線程出現停頓的時候通過jstack來查看各個線程的調用堆棧,就可以知道沒有響應的線程到底在後臺做什麼事情,或者等待什麼資源。 如果java程序崩潰生成core文件,jstack工具可以用來獲得core文件的java stack和native stack的信息,從而可以輕鬆地知道java程序是如何崩潰和在程序何處發生問題。另外,jstack工具還可以附屬到正在運行的java程序中,看到當時運行的java程序的java stack和native stack的信息, 如果現在運行的java程序呈現hung的狀態,jstack是非常有用的。

常用命令:jstack -l 3500

2.8 HSDIS:JIT生成代碼反彙編

一般分析程序如何執行,通過軟件調試工具(GDB、Windbg等)來斷點調試是最常見的手段,但是這樣的調試方式在Java虛擬機中會遇到很大的困難,因爲大量執行代碼是通過JIT編譯器動態生成到CodeBuffer中的,沒有很簡單的手段來處理這種混合模式的調試。
基於這種背景,就有了HSDIS插件

3 JDK的可視化工具

3.1 JConsole:Java監視與管理控制檯

3.2 VisualVM:多合一故障處理工具

參考

基於JDK命令行工具的監控
JVM筆記8-虛擬機性能監控與故障處理工具

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章