深刻理解虛擬機之虛擬機性能監控和故障處理工具

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

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

JVM調優的常見命令行工具備哪些?瀏覽器

1 概述

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

2 JDK命令行工具(JDK安裝的bin目錄下):

下面這些命令行工具java.exe以及javac.exe咱們都很熟悉了,下面咱們主要看看其餘命令行工具的做用。
JDK命令行工具微信

JDK監控和故障處理工具

  • 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,顯示虛擬機的線程快照

2.1 jps:虛擬機進程情況工具

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

jps的經常使用功能選項:
jps的經常使用功能選項性能

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

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

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

jstat主要工具選項:
jstat主要工具選項
測試:
測試spa

2.3 jinfo:Java配置信息工具

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

測試:
測試

2.4 jmap:Java內存映像工具

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系統下使用。

2.5 jstack:Java堆棧跟蹤工具

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

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

3 JDK可視化工具:

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

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

控制檯啓動或者直接雙擊可執行程序。
控制檯啓動或者直接雙擊可執行程序

以下圖所示(這裏就不具體介紹某一點了):
jconsole

咱們再來看看jvisualvm

位置

主界面

簡單使用

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

相關文章
相關標籤/搜索