當前位置:
首頁 > 最新 > 虛擬機性能監控和故障處理工具

虛擬機性能監控和故障處理工具

《深入理解Java虛擬機:JVM高級特性與最佳實踐(第二版》讀書筆記與常見面試題總結

本節常見面試題(推薦帶著問題閱讀,問題答案在文中都有提到):

JVM調優的常見命令行工具有哪些?

1 概述

給一個系統定位問題的時候,知識、經驗是關鍵基礎,數據是依據,工具是運用知識處理數據的手段。經常 使用適當的虛擬機監控和分析工具可以加速我們分析數據、定位解決問題的速度,但在學習工具前,也應當意識到工具永遠都是知識技能的一層包裝,並沒有什麼工具是「秘密武器」,不可能學會了就能包治百病。


下面這些命令行工具java.exe以及javac.exe我們都很熟悉了,下面我們主要看看其他命令行工具的作用。


jps:JVM Process Status Tool ,顯示指定系統內所有的HotSpot虛擬機進程

jstat: JVM Statistics Monitoring Tool ,用於收集HotSpot虛擬機各方面的運行數據。

jinfo: Configuration Info forJava,顯示虛擬機配置信息

jmap: Memory Map for Java,生成虛擬機的內存轉儲快照(heapdump文件)

jhat: JVM Heap Dump Browser ,用於分析heapdump文件,它會建立一個HTTP/HTML伺服器,讓用戶可以在瀏覽器上查看分析結果

jstack: Stack Trace forJava,顯示虛擬機的線程快照

JDK的很多小工具的名字都參考了UNIX命令的命名方式,jps(JVM Process Status)是其中的典型。除了名字像UNIX的ps命令外,它的功能也和ps命令類似:可以列出正在運行的虛擬機進程,並顯示虛擬機執行主類名稱以及這些進程的本地虛擬機唯一ID(Local Virtual Machine Identifier,LVMID)。雖然功能比較單一,但它是使用最高的JDK命令行工具,因為其他的JDK工具大多需要輸入它查詢到的LVMID來確定要監控的是哪一個虛擬機進程。

jps的常用功能選項:

測試:上面輸出了我正在運行程序的包名下的類名:


jstat(JVM Statistics Monitoring Tool) 使用於監視虛擬機各種運行狀態信息的命令行工具。它可以顯示本地或者遠程(需要遠程主機提供RMI支持)虛擬機進程中的類信息、內存、垃圾收集、JIT編譯等運行數據,在沒有GUI,只提供了純文本控制台環境的伺服器上,它將是運行期間定位虛擬機性能問題的首選工具。

jstat主要工具選項:

測試:


jinfo(Configuration Info for Java) 的作用是實時地查看和調整虛擬機各項參數。使用jps命令的-v可以查看虛擬機啟動時顯式指定的參數列表,但如果想知道未被顯式指定的參數的系統默認值,可以使用jinfo的-flag選項進行查詢,jinfo還可以使用-sysprops選項把虛擬機進程的System.getProperties()的內容列印出來。

測試:


jmap(Memory Map for Java)命令用於生成堆轉儲快照。如果不使用jmap命令,要想獲取Java堆轉儲,可以使用「-XX:+HeapDumpOnOutOfMemoryError」參數,可以讓虛擬機在OOM異常出現之後自動生成dump文件,Linux命令下可以通過kill -3發送進程退出信號也能拿到dump文件。

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


jstack(Stack Trace for Java)命令用於生成虛擬機當前時刻的線程快照。線程快照就是當前虛擬機內每一條線程正在執行的方法堆棧的集合.

生成線程快照的目的主要是定位線程長時間出現停頓的原因,如線程間死鎖、死循環、請求外部資源導致的長時間等待等都是導致線程長時間停頓的原因。線程出現停頓的時候通過jstack來查看各個線程的調用堆棧,就可以知道沒有響應的線程到底在後台做些什麼事情,或者在等待些什麼資源。**


JConsole和VisualVM是兩個功能強大的可視化工具。

從Java 5開始 引入了 JConsole,JConsole 是一個內置 Java 性能分析器。您可以輕鬆地使用 JConsole(或者,它更高端的 「近親」 jvisualvm )來監控 Java 應用程序性能和跟蹤 Java 中的代碼。(推薦使用升級版 JConsole 即 jvisualvm 。)

控制台啟動或者直接雙擊可執行程序。

如下圖所示(這裡就不具體介紹某一點了):

我們再來看看jvisualvm

歡迎關注我的微信公眾號:"Java面試通關手冊"(一個有溫度的微信公眾號,期待與你共同進步~~~堅持原創,分享美文,分享各種Java學習資源):


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Java面試通關手冊 的精彩文章:

TAG:Java面試通關手冊 |