JVM實操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)

前言

在查詢JVM相關問題的時候少不了jps、jstat、jinfo、jmap、jhat、jstack等命令工具。本文將會詳細介紹這些命令工具的使用。

jps

列出當前機器上正在運行的虛擬機進程,JPS 從操作系統的臨時目錄上去找。

-q :僅僅顯示進程,

-m:輸出主函數傳入的參數. 下的 hello 就是在執行程序時從命令行輸入的參數

-l: 輸出應用程序主類完整 package 名稱或 jar 完整名稱.

-v: 列出 jvm 參數, -Xms20m -Xmx50m 是啟動程序指定的 jvm 參數

示例:

JVM實操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)

jstat

是用於監視虛擬機各種運行狀態信息的命令行工具。它可以顯示本地或者遠程虛擬機進程中的類裝載、內存、垃圾收集、JIT 編譯等運行數據,在沒有 GUI圖形界面,只提供了純文本控制檯環境的服務器上,它將是運行期定位虛擬機性能問題的首選工具。

假設需要每 250 毫秒查詢一次進程 13616 垃圾收集狀況,一共查詢 10 次,那命令應當是:jstat -gc 13616 250 10 常用參數:

-class (類加載器)

-compiler (JIT)

-gc (GC 堆狀態)

-gccapacity (各區大小)

-gccause (最近一次 GC 統計和原因)

-gcnew (新區統計)

-gcnewcapacity (新區大小)

-gcold (老區統計)

-gcoldcapacity (老區大小)

-gcpermcapacity (永久區大小)

-gcutil (GC 統計彙總)

-printcompilation (HotSpot 編譯統計)

示例:

JVM實操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)

jinfo

查看和修改虛擬機的參數

jinfo –sysprops 可以查看由 System.getProperties()取得的參數

jinfo –flag 未被顯式指定的參數的系統默認值

jinfo –flags(注意 s)顯示虛擬機的參數

jinfo –flag +[ 參 數 ] 可 以 增 加 參 數 , 但 是 僅 限 於 由 java -XX:+PrintFlagsFinal –version 查 詢 出 來 且為 manageable 的參數

jinfo –flag -[參數] 可以去除參數


JVM實操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)

java -XX:+PrintFlagsFinal –version執行結果


JVM實操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)


JVM實操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)

jmap

用於生成堆轉儲快照(一般稱為 heapdump 或 dump 文件)。jmap 的作用並不僅僅是為了獲取 dump 文件,它還可以查詢 finalize 執行隊列、Java 堆和永久代的詳細信息,如空間使用率、當前用的是哪種收集器等。和 jinfo 命令一樣,jmap 有不少功能在 Windows 平臺下都是受限的,除了生成 dump 文件的-dump 選項和用於查看每個類的實例、空間佔用統計的-histo 選項在所有操作系統都提供之外,其餘選項都只能在 Linux/Solaris 下使用。

jmap -dump:live,format=b,file=heap.bin

Sun JDK 提供 jhat(JVM Heap Analysis Tool)命令與 jmap 搭配使用,來分析 jmap 生成的堆轉儲快照。


JVM實操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)

jhat

jhat dump 文件名

後屏幕顯示“Server is ready.”的提示後,用戶在瀏覽器中鍵入 http://localhost:7000/就可以訪問詳情


JVM實操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)

使用 jhat 可以在服務器上生成堆轉儲文件分析(一般不推薦,畢竟佔用服務器的資源,比如一個文件就有 1 個 G)

jstack

jstack(Stack Trace for Java)命令用於生成虛擬機當前時刻的線程快照。線程快照就是當前虛擬機內每一條線程正在執行的方法堆棧的集合,生成線程快照的主要目的是定位線程出現長時間停頓的原因,如線程間死鎖、死循環、請求外部資源導致的長時間等待等都是導致線程長時間停頓的常見原因。在代碼中可以用 java.lang.Thread 類的 getAllStackTraces()方法用於獲取虛擬機中所有線程的StackTraceElement 對象。使用這個方法可以通過簡單的幾行代碼就完成 jstack 的大部分功能,在實際項目中不妨調用這個方法做個管理員頁面,可以隨時使用瀏覽器來查看線程堆棧。



下面介紹兩個可視化工具:

JMX

JMX(Java Management Extensions,即 Java 管理擴展)是一個為應用程序、設備、系統等植入管理功能的框架。JMX 可以跨越一系列異構操作系統平臺、系統體系結構和網絡傳輸協議,靈活的開發無縫集成的系統、網絡和服務管理應用。

管理遠程進程需要在遠程程序的啟動參數中增加:

-Djava.rmi.server.hostname=…..

-Dcom.sun.management.jmxremote

-Dcom.sun.management.jmxremote.port=8888

-Dcom.sun.management.jmxremote.authenticate=false

-Dcom.sun.management.jmxremote.ssl=false

Jconsole

工具目錄:在JDK的bin目錄下面


JVM實操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)


JVM實操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)


JVM實操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)


JVM實操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)


JVM實操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)

visualvm

工具目錄:在JDK的bin目錄下面

插件中心地址:https://visualvm.github.io

但是注意版本問題,不同的 JDK 所帶的 visualvm 是不一樣的,下載插件時需要下對應的版本。一般來說,這個工具是本機調試用,一般生產上來說,你一般是用不了的(除非啟用遠程連接)


JVM實操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)


JVM實操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)


JVM實操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)


JVM實操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)


JVM實操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)


JVM實操篇- 命令的使用(包含:jps、jstat、jinfo、jmap)


分享到:


相關文章: