1. 程式人生 > >Java虛擬機器詳解(八)------虛擬機器監控和分析工具(2)——視覺化

Java虛擬機器詳解(八)------虛擬機器監控和分析工具(2)——視覺化

  上篇部落格我們介紹了虛擬機器監控和分析命令列工具,由於其不夠直觀,不是很容易排查問題,那麼本篇部落格我們就來介紹幾個視覺化工具。

1、JConsole

  JConsole(Java Monitoring and Management Console)是一款基於 JMX 的視覺化監視和管理的工具。它管理部分的功能是針對 JMX MBean 進行管理,MBean 可以使用程式碼、中介軟體伺服器的管理控制檯或者所有符合 JMX 規範的軟體進行訪問。

  JMX(Java Management Extensions)是一個為應用程式植入管理功能的框架,一套標準的代理和服務;MBean就是一種規範的JavaBean,通過整合和實現一套標準的Bean介面。

①、啟動 JConsole

  這是我們JDK自帶的監控工具,在JDK的安裝目錄bin下即可找到。

  如果配置過JDK環境變數,在CMD命令提示符中輸入 jconsole 也可直接開啟。

  

  這是一個可執行檔案,直接雙擊即可開啟。開啟如下:

  

②、監控介面介紹

  JConsole 這個監控工具可以監控本地程序以及遠端程序,我們這裡以監控本地程序為例,來介紹具體的監控介面。

  點選本地程序下面的任意一欄,進入到監控介面。

  1、監控概覽

  

  這個介面是我們建立本地連線後,進入的第一個頁面。顯示的是整個虛擬機器主要執行資料的概覽,包括“堆使用情況”、“執行緒”、“類”、“CPU佔用率”等四項資訊的曲線圖,這些曲線圖是後面“記憶體”、“執行緒”、“類”頁籤的資訊彙總,下面會分別介紹這幾個頁籤。

  2、記憶體監控

  這個頁籤相當於上一篇部落格介紹的jstat命令,不過這裡是視覺化的。用於監視虛擬機器記憶體的一些變化趨勢。

  監視區域如下:

  

  3、執行緒監控

  這個頁籤相當於上篇部落格介紹的視覺化的jstat 命令。遇到執行緒停頓的時候可以使用這個頁籤進行監控分析。

  

  另外,此頁面左下角還有一個檢測死鎖的按鈕,出現執行緒死鎖後,點選此按鈕,便會出現一個新的死鎖頁籤。

  比如,對於如下這段死鎖程式碼:

 1     @GetMapping("/test2")
 2     public void test2() throws Exception{
 3         Object lock1 = new Object();
 4         Object lock2 = new Object();
 5 
 6         new Thread(()->{
 7             synchronized (lock1){
 8                 try {
 9                     Thread.sleep(1000);
10                 } catch (InterruptedException e) {
11                     e.printStackTrace();
12                 }
13                 synchronized (lock2){
14                     System.out.println("執行緒1結束執行");
15                 }
16             }
17         }).start();
18 
19         new Thread(()->{
20             synchronized (lock2){
21                 try {
22                     Thread.sleep(1000);
23                 } catch (InterruptedException e) {
24                     e.printStackTrace();
25                 }
26                 synchronized (lock1){
27                     System.out.println("執行緒2結束執行");
28                 }
29             }
30         }).start();
31     }

  這裡建立了兩把鎖,lock1,lock2,建立了兩個執行緒,執行緒1獲取到lock1後,說你給我lock2,我就釋放lock1;而執行緒2獲取到lock2後,說你給我lock1,我就釋放lock2。兩個執行緒誰也不釋放,於是便造成了死鎖現象。

  通過監控工具便可以檢測到,如下:

  

  4、類監控

  

  5、VM概要

  展示一些JVM資訊。

  

③、配置Tomcat遠端監控

   其實使用監控工具,我們很少對本地的程式進行監控,大多數情況都是對部署在遠端Linux伺服器上的程式進行監控,那麼想要使用 JConsole這款工具進行遠端監控,我們必須要進行一些配置。我們首先介紹對Tomcat的遠端監控。

  1、配置catalina.sh

  在該檔案下加入如下配置資訊:

JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=192.168.146.200 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"

  -Dcom.sun.management.jmxremote 表示開啟遠端連線。

  -Dcom.sun.management.jmxremote.port=9004 表示設定遠端連線埠為1099

  -Dcom.sun.management.jmxremote.authenticate=false 表示不需要密碼驗證

  -Dcom.sun.management.jmxremote.ssl=fals 表示不需要開啟ssl連線

  -Djava.net.preferIPv4Stack=true 表示只支援IPV4地址

  -Djava.rmi.server.hostname=192.168.146.200 表示監控的主機名為192.168.146.200

  新增位置如下:

  

 

  2、建立連線

  通過上面的配置,啟動Tomcat後,我們只需要在 JConsole 的遠端連線介面,輸入 192.168.146.200:9004 ,然後點選連線即可。

  

  3、連線錯誤情況

  如果無法連線,需要依次檢測如下資訊:

  ①、配置的埠不能被佔用,可以通過 netstat -tunlp|grep 1099 命令驗證。

  ②、防火牆開啟對上面設定埠的信任

  ③、通過 hostname -i 命令,如果列印的不是前面設定的ip地址,則需要通過 vim /etc/hosts 命令,將127.0.0.1 修改為本機IP地址。

④、配置遠端jar包監控

  啟動jar包的命令如下:

nohup java -Djava.rmi.server.hostname=192.168.146.200 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1089 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -jar jvm-0.0.1-SNAPSHOT.jar &

  配置埠,ip地址,和遠端監控Tomcat大體上是一樣的,然後建立連線即可。

 2、JVisualVM

  英文介紹為 All-in-One Java Troubleshooting Tool。聽名字我們就知道這是一塊功能很全,很強大的Java執行監視和故障處理工具,並且是官方主力發展的虛擬機器故障處理工具,其效能分析比很多專業收費軟體都不會遜色多少。

①、啟動 JVisualVM

  和前面介紹的JConsole工具一樣,這也是 JDK 自帶的一個工具,在安裝目錄bin下,可以直接雙擊啟動。

  

  開啟介面如下:

  

②、監控介面介紹

  其實大體介面和JConsole差不多。

  

  抽樣器可以對CPU,記憶體進行詳細監控統計。

  

③、外掛機制

  JVisualVM 比較強大的地方在與可以安裝各種外掛,提供各種不同的功能。

  點選上方選單欄 工具---》外掛:

  

  然後設定外掛中心的地址:

  

  這個地址,我們可以到這個網址上去獲取:

  https://visualvm.github.io/pluginscenters.html

  選擇對應的外掛地址時,要根據我們的JDK版本來選定。

  比如,我這邊的JDK版本如下:

  

  那麼選擇的地址如下(152,介於131-221之間):

  

  設定好下載地址後,我們這邊選擇需要的外掛,點選安裝即可!比如比較常用的外掛 Visual GC(用來檢視GC日誌)

  

   安裝完成之後,我們便可以在頁簽上看到這個新增的外掛。

  

④、配置遠端連線

  不管是遠端連線Tomcat還是jar包,都和介紹JConsole一模一樣,詳情請參考上面的配置。

⑤、使用文件

  對於JVisualvm,官方有詳細的中文文件說明,如下:

  https://visualvm.github.io/documentation.html