天天看點

Java應用程式性能調優的秘訣:掌握JVM自帶的指令行工具

作者:玄明Hanko

#挑戰30天在頭條寫日記#

Java 自帶了多個 JVM 調優工具,以下是其中一些常用的工具:

1)jps(JVM Process Status Tool):

用于顯示目前系統中所有正在運作的 Java 程序的 PID 和相關資訊。

Java應用程式性能調優的秘訣:掌握JVM自帶的指令行工具

2)jstat(JVM Statistics Monitoring Tool):

用于實時監控和輸出 JVM 的各種統計資料,如類加載情況、垃圾回收情況等。

#jstat -gcutil pid ms
#pid=4873
#ms=1000:重新整理時間間隔,機關ms
jstat -gcutil 4873 1000           
Java應用程式性能調優的秘訣:掌握JVM自帶的指令行工具

jstat -gcutil pid ms 是一條 jstat 指令,用于輸出指定程序的 JVM 記憶體使用情況,并且可以設定輸出時間間隔。

其中,“-gcutil”參數表示輸出目前堆記憶體區域(Eden、Survivor、Old Gen等)的使用率和占比情況,即各個區域已使用記憶體和總容量之比。這些名額可以幫助使用者了解 JVM 的記憶體使用情況,并根據情況進行相應的調優。

  • “pid”是要監控的 Java 程序的程序 ID,通過 jps 指令可以獲得目前系統中所有 Java 程序的 PID。
  • “ms”是指輸出時間間隔,機關為毫秒。例如,執行 jstat -gcutil 1234 5000 指令将會每隔5秒輸出一次程序 ID 為 1234 的 Java 應用程式的堆記憶體使用率和占比情況。

該指令可以友善地監控和分析 JVM 的記憶體使用情況,同時也是 JVM 調優工作中常用的工具之一。

3)jmap(JVM Memory Map Tool):

用于生成堆記憶體快照,并提供詳細的堆記憶體資訊,如對象數量、大小、類型等。

jmap 可以幫助開發者深入分析 Java 應用程式的記憶體使用情況,定位記憶體洩漏問題和優化記憶體使用效率。常見的使用方式如下:

(1)生成記憶體快照:使用 jmap 指令生成 Java 程序的記憶體快照檔案,例如:

jmap -dump:format=b,file=heapdump.bin <pid>           

其中,“-dump”參數表示生成記憶體快照,“format=b”表示生成二進制格式的快照檔案,“file=heapdump.bin”指定生成的檔案名,“<pid>”為要監控的 Java 程序的程序 ID。

Java應用程式性能調優的秘訣:掌握JVM自帶的指令行工具

(2)檢視對象統計資訊:使用 jmap 指令生成 Java 程序的對象統計資訊,例如:

jmap -histo <pid>           

該指令将輸出每種對象類型的數量、占用空間大小和類全名等詳細資訊。

Java應用程式性能調優的秘訣:掌握JVM自帶的指令行工具

(3)檢視 ClassLoader 統計資訊:使用 jmap 指令生成 Java 程序的 ClassLoader 統計資訊,例如:

jmap -clstats <pid>           

該指令将輸出目前 Java 程序中所有 ClassLoader 的統計資訊,包括加載類數、解除安裝類數、總共加載的類數等。

Java應用程式性能調優的秘訣:掌握JVM自帶的指令行工具

4)jstack(JVM Stack Trace Tool):

用于輸出指定程序的 Java 線程狀态、調用棧和鎖資訊等,可以幫助使用者分析線程問題。

jstack 的常見使用方式如下:

(1)輸出線程狀态:使用 jstack 指令輸出指定 Java 程序中目前所有線程的狀态,例如:

jstack <pid>           
Java應用程式性能調優的秘訣:掌握JVM自帶的指令行工具

(2)輸出死鎖資訊:使用 jstack 指令輸出指定 Java 程序中的死鎖資訊,例如:

jstack -F -m <pid>           

其中,“-F”參數表示強制輸出線程堆棧資訊,“-m”表示輸出所有線程的調用棧資訊。

Java應用程式性能調優的秘訣:掌握JVM自帶的指令行工具

5)jconsole(JVM Console Tool):

一個基于 GUI 的工具,可以監控 JVM 運作狀态、記憶體使用情況、線程狀态等,同時還提供了對 JVM 垃圾回收器和類加載器的配置選項。

Java應用程式性能調優的秘訣:掌握JVM自帶的指令行工具

6)jcmd(JVM Command Tool):

用于向正在運作的 Java 程序發送診斷指令,并輸出相應的診斷資訊。

jcmd 指令可以監控和管理正在運作的 Java 程序,包括線程狀态、記憶體使用情況、GC 狀态、類加載器資訊等。常見的使用方式如下:

(1)列出目前所有可用的 Java 程序:使用 jcmd 指令列出目前系統中所有正在運作的 Java 程序,例如:

jcmd           
Java應用程式性能調優的秘訣:掌握JVM自帶的指令行工具

(2)輸出 Java 程序的 GC 資訊:使用 jcmd 指令輸出指定 Java 程序的 GC 相關資訊,例如:

jcmd <pid> GC.info           

(3)輸出 Java 程序的線程堆棧資訊:使用 jcmd 指令輸出指定 Java 程序中所有線程的堆棧資訊,例如:

jcmd <pid> Thread.print           
Java應用程式性能調優的秘訣:掌握JVM自帶的指令行工具

(4)執行 Java 程序的垃圾回收操作:使用 jcmd 指令執行指定 Java 程序的垃圾回收操作,例如:

jcmd <pid> GC.run           

==================================

如果文章對你有幫助,不要忘記加個關注、點個贊!!!

繼續閱讀