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

  上篇博客咱們介紹了虛擬機監控和分析命令行工具,因爲其不夠直觀,不是很容易排查問題,那麼本篇博客咱們就來介紹幾個可視化工具。html

一、JConsole

  JConsole(Java Monitoring and Management Console)是一款基於 JMX 的可視化監視和管理的工具。它管理部分的功能是針對 JMX MBean 進行管理,MBean 可使用代碼、中間件服務器的管理控制檯或者全部符合 JMX 規範的軟件進行訪問。java

  JMX(Java Management Extensions)是一個爲應用程序植入管理功能的框架,一套標準的代理和服務;MBean就是一種規範的JavaBean,經過集成和實現一套標準的Bean接口。git

①、啓動 JConsole

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

  若是配置過JDK環境變量,在CMD命令提示符中輸入 jconsole 也可直接打開。vim

  

  這是一個可執行文件,直接雙擊便可打開。打開以下:服務器

  

②、監控界面介紹

  JConsole 這個監控工具能夠監控本地進程以及遠程進程,咱們這裏以監控本地進程爲例,來介紹具體的監控界面。app

  點擊本地進程下面的任意一欄,進入到監控界面。框架

  一、監控概覽jvm

  

  這個界面是咱們創建本地鏈接後,進入的第一個頁面。顯示的是整個虛擬機主要運行數據的概覽,包括「堆使用狀況」、「線程」、「類」、「CPU佔用率」等四項信息的曲線圖,這些曲線圖是後面「內存」、「線程」、「類」頁籤的信息彙總,下面會分別介紹這幾個頁籤。工具

  二、內存監控

  這個頁籤至關於上一篇博客介紹的jstat命令,不過這裏是可視化的。用於監視虛擬機內存的一些變化趨勢。

  監視區域以下:

  

  三、線程監控

  這個頁籤至關於上篇博客介紹的可視化的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。兩個線程誰也不釋放,因而便形成了死鎖現象。

  經過監控工具即可以檢測到,以下:

  

  四、類監控

  

  五、VM概要

  展現一些JVM信息。

  

③、配置Tomcat遠程監控

   其實使用監控工具,咱們不多對本地的程序進行監控,大多數狀況都是對部署在遠程Linux服務器上的程序進行監控,那麼想要使用 JConsole這款工具進行遠程監控,咱們必需要進行一些配置。咱們首先介紹對Tomcat的遠程監控。

  一、配置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

  添加位置以下:

  

 

  二、創建鏈接

  經過上面的配置,啓動Tomcat後,咱們只須要在 JConsole 的遠程鏈接界面,輸入 192.168.146.200:9004 ,而後點擊鏈接便可。

  

  三、鏈接錯誤狀況

  若是沒法鏈接,須要依次檢測以下信息:

  ①、配置的端口不能被佔用,能夠經過 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大致上是同樣的,而後創建鏈接便可。

 二、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

相關文章
相關標籤/搜索