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