《深入理解JAVA虚拟机》周志明 第三版 - 第四章 虚拟机性能监控、故障处理工具
4.1 概述
恰當地使用虛擬機故障處理、分析的工具可以提升我們分析數據、定位并解決問題的效率。
4.2 基礎故障處理工具
JDK的bin目錄中有java.exe、javac.exe這兩個命令行工具,還有各種小工具,除了編譯和運行Java程序外,打包、部署、簽名、調試、監控、運維等各種場景都可能會用到它們。
4.2.1 jps:虛擬機進程狀況工具
可以列出正在運行的虛擬機進程,并顯示虛擬機執行主類(Main Class,main()函數所在的類)名稱以及這些進程的本地虛擬機唯一ID,功能比較單一,但它絕對是使用頻率最高的JDK命令行工具。
jps還可以通過RMI協議查詢開啟了RMI服務的遠程虛擬機進程狀態,參數hostid為RMI注冊表中
注冊的主機名。
4.2.2 jstat:虛擬機統計信息監視工具
是用于監視虛擬機各種運行狀態信息的命令行工具。它可以顯示本地或者遠程[1]虛擬機進程中的類加載、內存、垃圾收集、即時編譯等運行時數據,在沒有GUI圖形界面、只提供了純文本控制臺環境的服務器上,它將是運行期定位虛擬機性能問題的常用工具。
4.2.3 jinfo:Java配置信息工具
是實時查看和調整虛擬機各項參數。使用jps命令的-v參數可以查看虛擬機啟動時顯式指定的參數列表,使用jinfo的-flag選項進行查詢未被顯式指定的參數的系統默認值。
4.2.4 jmap:Java內存映像工具
jmap(Memory Map for Java)命令用于生成堆轉儲快照,還可以查詢finalize執行隊列、Java堆和方法區的詳細信息,如空間使用率、當前用的是哪種收集器等。
4.2.5 jhat:虛擬機堆轉儲快照分析工具
jhat內置了一個微型的HTTP/Web服務器,生成堆轉儲快照的分析結果后,可以在瀏覽器中查看。耗時而且極為耗費硬件資源,分析功能相對來說比較簡陋。
4.2.6 jstack:Java堆棧跟蹤工具
用于生成虛擬機當前時刻的線程快照(一般稱為threaddump或者javacore文件),生成線程快照的目的通常是定位線程出現長時間停頓的原因,如線程間死鎖、死循環、請求外部資源導致的長時間掛起等,都是導致線程長時間停頓的常見原因。
4.2.7 基礎工具總結
在高版本的JDK中,這些工具大多已有了功能更為強大的替代品,譬如JCMD、JHSDB的命令行
模式,但使用方法也是相似的,無論JDK發展到了什么版本,學習這些基礎的工具命令并不會過時和浪費。
4.3 可視化故障處理工具
4.3.1 JHSDB:基于服務性代理的調試工具
JHSDB是一款基于服務性代理(Serviceability Agent,SA)實現的進程外調試工具。服務性代理是HotSpot虛擬機中一組用于映射Java虛擬機運行信息的、主要基于Java語言(含少量JNI代碼)實現的API集合。在實際開發、學習時,可以用它來調試虛擬機進程或者dump出來的內存轉儲快照。
4.3.2 JConsole:Java監視與管理控制臺
是一款基于JMX(Java Manage-ment Extensions)的可視化監視、管理工具。它的主要功能是通過JMX的MBean(Managed Bean)對系統進行信息收集和參數動態調整。JMX是一種開放性的技術,不僅可以用在虛擬機本身的管理上,還可以運行于虛擬機之上的軟件中。虛擬機對JMX
MBean的訪問也是完全開放的,可以使用代碼調用API、支持JMX協議的管理控制臺,或者其他符合JMX規范的軟件進行訪問。
4.3.3 VisualVM:多合-故障處理工具
是功能最強大的運行監視和故障處理程序之一,它除了常規的運行監視、故障處理外,還將提供其他方面的能力,譬如性能分析(Profiling)。VisualVM還有一個很大的優點:不需要被監視的
程序基于特殊Agent去運行,因此它的通用性很強,對應用程序實際性能的影響也較小,使得它可以直接應用在生產環境中。這個優點是JProfiler、YourKit等第三方工具無法與之媲美的。
4.3.4 Java Mission Control:可持續在線的監控工具
現在的JMC不僅可以下載到獨立程序,更常見的是作為Eclipse的插件來使用。JMC與虛擬機之間同樣采取JMX協議進行通信,JMC一方面作為JMX控制臺,顯示來自虛擬機MBean提供的數據;另一方面作為JFR的分析工具,展示來自JFR的數據。
4.4 HotSpot虛擬機插件及工具
在HotSpot的研發過程中,開發團隊曾經編寫(或者收集)過不少虛擬機的插件和輔助工
具,它們存放在HotSpot源碼hotspot/src/share/tools目錄下,包括(含曾經有過但新版本中已被移除的):
Ideal Graph Visualizer:用于可視化展示C2即時編譯器是如何將字節碼轉化為理想圖,然后轉化為機器碼的。
·Client Compiler Visualizer:用于查看C1即時編譯器生成高級中間表示(HIR),轉換成低級中間表示(LIR)和做物理寄存器分配的過程。
·MakeDeps:幫助處理HotSpot的編譯依賴的工具。
·Project Creator:幫忙生成Visual Studio的.project文件的工具。
·LogCompilation:將-XX:+LogCompilation輸出的日志整理成更容易閱讀的格式的工具。
·HSDIS:即時編譯器的反匯編插件。
4.5 本章小結
靈活使用這些工具,可以為處理問題帶來很大的便利。除了本章涉及的OpenJDK中自帶的工具之外,還有很多其他監控和故障處理工具,如何進行監控和故障診斷,這并不是《Java虛擬機規范》中定義的內容,而是取決于虛擬機實現自身的設計。
總結
以上是生活随笔為你收集整理的《深入理解JAVA虚拟机》周志明 第三版 - 第四章 虚拟机性能监控、故障处理工具的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 周志明是谁?
- 下一篇: 【第64期】豆瓣9.8分,周志明的《凤凰