JVM調優(yōu)工具

名稱 全寫 主要作用
jpa JVM Process Status Tool 顯示指定系統(tǒng)內所有的 HotSpot 虛擬機進程
jstat JVM Statistics Monitoring Tool 用于收集 HotSpot 虛擬機各方面的運行參數(shù)
jinfo Configuration Info for Java 顯示虛擬機配置信息
jmap Memory Map for Java 生成虛擬機的內存轉儲快照(heapdump文件)
jhat JVM Heap Dump Browser 用于 heapdump 文件,它會建立一個HTTP/HTML 服務器,讓用戶可以在瀏覽器上查看分析結果
jstack Stack Trace for Java 顯示虛擬機的線程快照

1. jps 虛擬機進程狀況工具

命令格式

jps [ options ] [ hostid ]

執(zhí)行樣例
image.png
其他參數(shù)
選項 作用
-q 只輸出 LVMID ,省略主類的名稱
-m 輸出虛擬機進程啟動時主類 main() 函數(shù)的參數(shù)
-l 輸出主類的全名,如果進程執(zhí)行的是 jar 包,輸出 jar 包路徑
-v 輸出虛擬機進程啟動時 JVM 參數(shù)

2. jstat 虛擬機統(tǒng)計信息監(jiān)視工具

命令格式

jstat [ options vmid [interval[s|ms] [count] ] ]

執(zhí)行樣例

250毫秒查詢一次進程12914垃圾收集狀態(tài),一共查詢20次


image.png
其他參數(shù)
選項 作用
-class 監(jiān)視類裝載、卸載數(shù)量、總空間以及類裝載所耗費的時間
-gc 監(jiān)視 java 堆狀況,包括 Eden 區(qū)、兩個 survivor 區(qū)、老年代、永久代等的容量、已用空間、GC時間合計等信息
-gccapacity 監(jiān)視內容與 -gc 基本相同,但輸出主要關注 Java 堆各個區(qū)域使用到的最大、最小空間
-gcutil 監(jiān)視內容與 -gc 基本相同,但輸出主要關注已使用空間占空間的百分比
-gccause 與 -gcutil 功能一樣,但是會額外輸出導致上一次 GC 產生的原因
-gcnew 監(jiān)視新生代 GC 狀況
-gcnewcapacity 監(jiān)視內容與 -gcnew 基本相同,輸出主要關注使用到的最大、最小空間
-gcold 監(jiān)視老年代 GC 狀態(tài)
-gcoldcapacity 監(jiān)視內容與 -gcold 基本相同,輸出主要關注使用到的最大、最小空間
-gcpermcapacity 輸出永久代使用到的最大、最小空間
-compiler 輸出 JIT 編譯器編譯過的方法、耗時等信息
-printcompilation 輸出已經被 JIT 編譯的方法

3. jinfo Java配置信息工具

命令格式

jstat [ options ] [ hostid ]

執(zhí)行樣例
image.png

4. jmap Java內存映像工具

命令格式

jstat [ options ] [ hostid ]

執(zhí)行樣例
image.png
其它參數(shù)
選項 作用
-dump 生成 Java 堆轉儲快照。格式為:-dump:[live, ]format=b, file=<filename>,其中 live 子參數(shù)說明是否只 dump 出存活的對象
-finalizerinfo 顯示在 F-Queue 中等待 finalizer 線程執(zhí)行 finalize 方法的對象。只在 Linux/Solaris 平臺下有效
-heap 顯示 Java 堆詳細信息,如使用那種回收期、參數(shù)配置、分代狀況等。只在 Linux/Solaris 平臺下有效
-histo 顯示堆中對象統(tǒng)計信息,包括類、實例數(shù)量、合計容量
-permstat 已 ClassLoader 為統(tǒng)計口徑顯示永久代內存狀態(tài)。只在 Linux/Solaris 平臺下有效
-F 當虛擬機進程對 -dump 選項沒有響應時,可使用這個選項強制生成 dump 快照。只在 Linux/Solaris 平臺下有效

5. jhat 虛擬機堆轉儲快照分析工具

命令格式

jhat 堆文件

6. jstack Java堆棧跟蹤工具

命令格式

jstack [ option ] vmid

執(zhí)行樣例
image.png
其它參數(shù)
選項 作用
-F 當正常輸出的請求不被響應時,強制輸出線程堆棧
-l 除堆棧外,顯示關于鎖的附件信息
-m 如果調用到本地方法的話,可以顯示 C/C++ 的堆棧

在 JDK 1.5中,java.lang.Thread 類新增了一個 getAllStackTraces() 方法用于獲取虛擬機中所有線程的 StackTraceElement 對象。使用這個可以隨時查看線程堆棧。

    for (Map.Entry<Thread, StackTraceElement[]> threadEntry : Thread.getAllStackTraces().entrySet()) {
            Thread key = threadEntry.getKey();
            StackTraceElement[] value = threadEntry.getValue();

            if (key.equals(Thread.currentThread())) {
                continue;
            }

            log.info("線程:" + key.getName());
            for (StackTraceElement stackTraceElement : value) {
                log.info("{}", stackTraceElement);
            }
        }
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 常用命令如下 1.jps命令:jps主要用來輸出JVM中運行的進程狀態(tài)信息2.jstat命令:jstat 它可以顯...
    桑榆非晚95閱讀 2,638評論 1 0
  • 調優(yōu)命令可以在Oracle官網 查看對應JDK版本文檔,下文所有的命令都是基于JDK8的。 找到JVM工具目錄 f...
    關捷閱讀 1,078評論 1 11
  • jdk的安裝目錄bin下面有關于jvm的許多工具,如jps,jstat,jstack,jcmd等等,我們可以靈活的...
    是王威啊閱讀 648評論 0 1
  • 工具做為圖形化界面來展示更能直觀的發(fā)現(xiàn)問題,另一方面一些耗費性能的分析(dump文件分析)一般也不會在生產直接分析...
    Java_Explorer閱讀 3,185評論 0 21
  • 最近一直在培養(yǎng)讀書的習慣,慢慢的也開始思考并開始重新認識自己。在這之前從來沒想過會重新認識自己,是啊,誰會不認識自...
    唐嘉閱讀 144評論 0 0

友情鏈接更多精彩內容