JVM
- jps
- jstat
- jmap
- jhat
- jstack
- jconsole
- jvisualvm
jps
jps( Java Virtual Machine Process Status Tool ),是 JDK 中的一個命令行工具,用于列出當前正在運行的 JVM 實例的信息。其對于監控和管理運行在多個 JVM 上的 Java 應用程序特別有用,因為可以快速提供 JVM 進程的標識符( PID )和主類名(或 JAR 文件名),以及其他可能的信息,如 JVM 參數。
基本語法:
jps [options] [hostid]options:可選參數,用于指定輸出信息的詳細程度。
hostid:RMI 注冊表中注冊的主機名,支持遠程監控主機上的 Java 程序(需要安裝 jstatd )。如果不指定,則默認為本地主機。常用選項:
-l:長格式輸出,包括 JVM 的完整命令行參數
-m:輸出傳遞給 main 方法的參數
-v:輸出 JVM 的啟動參數
-q:只輸出進程 ID ,不輸出其他信息
-h 或 --help:顯示幫助信息
--version:顯示版本信息
jstat
jstat(JavaVirtualMachine statistics monitoring tool),是 JDK 中的一個輕量級小工具,主要用于監控 Java 應用程序的資源和性能,可以通過 JVM 內建的指令對 Java 應用程序的堆內存、類加載、JIT 編譯等信息進行實時監控。
基本語法:
jstat [option] vmid [interval[s|ms]] [count]option:需要監控的數據類型,如 -gc 、-class 等。
vmid:JVM 的標識符,通常是 Java 進程的 ID ( pid )。
interval:采樣間隔,單位可以是秒( s )或毫秒( ms ),默認為毫秒。
count:采樣次數,如果省略,則默認會一直采樣直到用戶中斷。常用選項:
-class:監控類裝載、卸載的數量,以及類裝載器的總耗時
-compiler:顯示 JIT 編譯的相關信息
-gc:監控與垃圾回收相關的堆內存統計信息
-gccapacity:監控各個內存區域(年輕代、老年代、元空間等)的容量及其當前大小
-gccause:監控垃圾回收的相關信息,包括上一次 GC 和當前(如果有)的 GC 原因
-gcnew:顯示新生代的詳細信息
-gcnewcapacity:顯示新生代對象的信息及其占用量,包括各個內存區域的最大容量、當前容量等信息
-gcold:顯示老年代 GC 的詳細情況
-gcoldcapacity:顯示老年代的大小
-gcutil:顯示垃圾回收信息,但主要以百分比形式展示各個內存區域的使用情況
-gcmetacapacity:顯示元空間中對象的信息及其占用量
-printcompilation:輸出 JIT 編譯的方法信息,包括編譯的方法名稱、編譯類型等信息
-t:可以在打印的列加上 Timestamp 列,用于顯示系統運行的時間
-h:可以在周期性數據輸出時,指定輸出多少行以后輸出一次表頭,方便閱讀
jmap
jmap( Java Virtual Machine Memory Map ),是 JDK 中的一個命令行工具,用于生成 JVM 的堆轉儲快照( dump 文件),以及查看堆內對象實例的統計信息、類加載器的信息以及 finalizer 隊列等。
基本語法:
jmap [option] <pid>
jmap [option] <executable> <core>
jmap [option] [server-id@]<remote-hostname-or-IP>option:可選參數,用于指定要執行的操作,如查看堆內存信息、生成堆轉儲快照等。
pid:要打印配置信息的 JVM 的進程 ID 。
executable:產生 core dump 的 Java 可執行文件。
core:需要打印配置信息的 core dump 文件。
server-id:可選的唯一 ID ,用于在相同的遠程主機上標識多個調試服務器。
remote-hostname-or-IP:遠程調試服務器的 IP 地址或主機名。常用選項:
-heap:打印 Java 堆的概要信息,包括使用的垃圾回收算法、堆配置參數和各代中堆內存的使用情況
-histo[:live]:打印 Java 堆中對象的直方圖,包括每個類的對象數量、占用內存大小和類的完全限定名。如果指定了 :live ,則只統計存活的對象
-clstats:打印類加載器的統計信息,包括類加載器的名稱、已加載的類的數量、所占用的字節數、父類加載器地址等信息
-finalizerinfo:打印在 F-Queue 隊列中等待 Finalizer 線程執行 finalize 方法的對象信息
-dump:<dump-options>:生成 Java 堆轉儲快照文件,該文件可以使用 MAT( Memory Analyzer Tool )、VisualVM 或 jhat 等工具進行查看
-F:當指定的 Java 進程沒有響應時,強制 jmap 執行 dump 或 histo 操作
jhat
jhat(Java Virtual Machine Heap Analysis Tool),是 JVM 中的一個堆轉儲快照分析工具,用于分析由 jmap 或其他工具生成的 heapdump 文件。jhat 通過建立一個 HTTP/HTML 服務器,讓用戶可以在瀏覽器上查看分析結果。
基本語法:
jhat [options] heap-dump-fileoptions:用于調整jhat 的行為或輸出。
heap-dump-file:要分析的 Java 堆轉儲文件的路徑。常用選項:
-J<flag>:可以在啟動 JVM 時傳入一些啟動參數
-stack false|true:關閉跟蹤對象分配調用堆棧。默認值為 true ,若分配位置信息在堆轉儲中不可用,則必須將此標志設置為 false 。
-refs false|true:關閉對象引用跟蹤。默認情況下,返回的指針是指向其他特定對象的對象
-port port-number:設置 jhat HTTP 服務器的端口號,默認值是7000
-exclude exclude-file:指定對象查詢時需要排除的數據成員列表文件
-baseline exclude-file:指定一個基準堆轉儲( baseline heap dump )。在兩個 heap dump 文件中有相同 object ID 的對象會被標記為不是新的( marked as not being new ),其他對象被標記為新的( new )。在比較兩個不同的堆轉儲時特別有用
-debug int:設置 debug 級別,0表示不輸出調試信息。值越大則表示輸出更詳細的 debug 信息
-version:啟動后只顯示版本信息就退出
jstack
jstack( Java Stack Trace ),是 JVM 中的一個堆棧跟蹤工具,用于生成 JVM 當前時刻的線程快照(當前 JVM 內每一條線程正在執行的方法堆棧的集合),適用于 Java 應用程序、分析性能問題、診斷死鎖等場景。
基本語法:
jstack [option] pid
jstack [option] executable core
jstack [option] [server-id@]remote-hostname-or-IPoption:可選的命令行參數選項。
pid:目標 Java 進程的進程 ID 。
executable:Java 可執行文件。
core:core dump 文件。
[server-id@]remote-hostname-or-IP:遠程調試服務的地址,其中 server-id 是可選的,用于指定遠程調試服務器的唯一標識符。常用選項:
-l:長列表模式,顯示關于鎖的附加信息
-m:混合模式,打印 Java 和本地 C/C++ 框架的所有棧信息
-F:當正常輸出的請求不被響應時,強制輸出線程堆棧信息
-h 或 -help:顯示幫助信息
jconsole
jconsole( Java Monitoring and Management Console ),是一個基于 JMX(Java Management Extensions)的可視化監視和管理工具,允許用戶連接到 Java 應用程序,并監控其內存使用、線程活動、類加載情況、垃圾回收行為等關鍵性能指標。
基本語法:
jconsole [options] [connection ...]options:可選參數選項。
connection ...:連接信息,可以是本地 Java 進程的 PID ,也可以是遠程主機的名稱或 IP 地址加上 JMX 代理的端口號。常用選項:
-interval=n:設置監視圖的刷新間隔時間(秒),默認值為4秒。這個選項允許用戶根據需要調整監視數據的更新頻率
-J<flag>:向底層Java虛擬機傳遞參數。<flag> 是指 JVM 的參數,而 -J 是指明 jconsole 將這些參數傳遞給自身的 JVM 實例
-notile:在某些情況下,jconsole 的圖形界面可能會以平鋪方式顯示多個標簽頁,而這個選項可以阻止這種行為,使界面更加緊湊
-pluginpath <path>:指定 jconsole 插件的路徑。這個選項允許用戶加載自定義的插件來擴展 jconsole 的功能
-version:顯示 jconsole 的版本信息
-help:顯示幫助信息
jvisualvm
jvisualvm(All-in-One Java Troubleshooting Tool),是一個功能強大、集成了多個 JDK 命令行工具的可視化工具,提供了圖形用戶界面和強大的分析能力,能夠直觀地了解 Java 應用程序的運行狀況和對 Java 應用程序進行性能分析和調優。還可以生成和分析海量數據、跟蹤內存泄漏、監控垃圾回收器、執行內存和 CPU 分析等。jvisualvm 不僅支持本地 JVM 進程的監控,還支持遠程 JVM 進程的監控,這需要通過 JMX(Java Management Extensions)技術實現。
使用方法:
- 啟動 jvisualvm :
在 Windows 系統上,可以通過在命令行中輸入 jvisualvm 命令或雙擊 %JAVA_HOME%/bin 目錄下的 jvisualvm.exe 文件來啟動 jvisualvm 。
在 Linux 或 macOS 系統上,可以通過在終端中輸入 jvisualvm 命令來啟動。 - 連接 JVM 進程:
啟動后,jvisualvm 會自動檢測并列出當前系統上所有可用的 JVM 進程。用戶可以選擇一個或多個進程進行連接,并開始監視和分析。 - 查看和分析數據:
連接后,用戶可以在 jvisualvm 的圖形界面中查看 JVM 的性能指標、內存使用情況、線程狀態等信息,也可以使用內置的分析工具或安裝插件來進行更深入的分析和調優。