深入理解JVM(③)虛擬機性能監控、故障處理工具

前言

JDK的bin目錄中有一系列的小工具,除了java.exe、javac.exe這兩個編譯和運行Java程序外,還有打包、部署、簽名、調試、監控、運維等各種場景都會用到這些小工具。

這些工具根據軟件可用性和授權的不同,可以把它們劃分為三類:

  • 商業授權工具: 主要是JMC(Java Mission Control)及它要使用到的JFR(Java Flight Recorder),JMC在個人開發環境中使用是免費的,但是在商業環境中使用它則是付費的。
  • 正式支持工具: 這一類工具屬於被長期支持的工具,不同平台、不同版本的JDK之間,這類工具可能會略有差異,但是不會出現某一個工具突然消失的情況。
  • 實驗性工具: 這一類工具在它們的使用說明中被聲明為“沒有技術支持,並且是實驗性質的”(Unsupported and Experimental)產品,日後可能會轉載,也可能會在某個JDK版本中國無聲無息地消失。

jps:虛擬機進程狀態工具

JDK的一些小工具都參考了UNIX的命名方式,jps(JVM Process Status Tool)是其中的典型。
功能也是和UNIX的ps的命令類似:
可以列出正在運行的虛擬機進程,並显示虛擬機執行主類(Main Class,main()函數所在的類)名稱以及這些進程的本地虛擬機唯一ID(LVMID,Local Virtual Machine Identifier)。
jps命令格式:

jps [ options ]  [ hostid ]

jps工具主要選項:

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

jstat( JVM Statistics Monitoring Tool )是用戶監視虛擬機各種運行狀態信息的命令行工具。可以显示本地虛擬機進程中 類加載、內存、垃圾收集、即時編譯等運行時數據,這個命令是在服務器是哪個運行期定位虛擬機性能問題的常用工具。
jstat 命令格式為:

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

參數interval 和 count 代表查詢間隔和次數,如果省略這2個參數,說明只查詢一次假設需要每250毫秒查詢一次進程 1440 垃圾收集狀況,一共查詢20次,那命令應當是:

jstat -gc 1440 250 20 

option 代表用戶希望查詢的虛擬機信息,主要分三類:
類加載、垃圾收集、運行期間編譯狀況。
jstat工具主要選項

jinfo:Java配置信息工具

jinfo(Configuration Info for Java)的作用是實時查看和調整虛擬機各項參數。使用jps命令的-v參數可以查看虛擬機啟動時显示指定的參數列表,但如果想知道未被显示指定的參數的系統默認值,除了去找資料外,就只能使用jinfo的-flag選項進行查詢了。jinfo還可以使用-sysprops選項把虛擬機進程的

System.getProperties()

的內容打出來。
jinfo 命令格式:

jinfo [ option ] pid

jmap:Java內存映像工具

jmap (Memory Map for Java)命令用於生成堆轉儲快照(一般稱為heapdump 或 dump文件)。
jmap的作用並不僅僅是為了獲取堆轉儲快照,它還可以查詢finalize執行隊列、Java堆和方法區的詳細信息,如空間使用率、當前用的是哪種收集器等。
jmap 命令格式:

jmap [ option ] vmid

jmap工具主要選項

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

JDK提供jhat(JVM Heap Analysis Tool)命令與jmap搭配使用,來分析jmap生成的堆轉儲快照。jhat內置了一個微型的HTTP/Web服務器,生成堆轉儲快照的分析結果后,可以在瀏覽器中查看。但是一般在實際工作中,都不會直接使用jhat命令來分析堆轉儲快照文件,一是因為分析工作耗時而且極為耗費資源,一般不會直接在服務器上使用,而是在其他機器上進行分析。二是jhat的分析功能比較簡陋,不如VisualVM,以及一些專業的分析工具例如:Eclipse Memory Analyzer、IBM HeapAnalyzer。

jstack:Java堆棧跟蹤工具

jstack(Stack Trace for Java)命令用於生成虛擬機當前時刻的線程快照(一般稱為threaddump或者javacore文件)。
線程快照就是當前虛擬機內每一條線程正在執行的方法堆棧的集合,生成線程快照的目的通常是定位線程出現長時間停頓的原因,如線程死鎖、死循環、請求外部資源導致長時間掛起等,都是導致線程長時間停頓的常見原因。
jstack命令格式:

jstack [ option ] vmid 

線程出現停頓時通過jstack來查看各個線程的調用堆棧,就可以獲知沒有響應的線程到底在後頭做些什麼事情,或者等待着什麼資源。
jstack工具主要選項

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※超省錢租車方案

※別再煩惱如何寫文案,掌握八大原則!

※回頭車貨運收費標準

※教你寫出一流的銷售文案?

FB行銷專家,教你從零開始的技巧