MAC JVM 調(diào)優(yōu)可視化工具 | JConsole操作指南,手把手教會(huì)你

簡(jiǎn)介
JConsole是一款基于JMX的可視化監(jiān)控和管理工具。

本文只介紹它的監(jiān)控功能,為了避免文字單一晦澀,C哥對(duì)每個(gè)知識(shí)點(diǎn)都有附上對(duì)應(yīng)的代碼示例。

1.啟動(dòng)JConsole
mac 在終端輸入jconsole即可。
windows 在cmd輸入jconsole或者找到Java安裝目錄下bin目錄下的jconsole.exe

【注】本文在Mac系統(tǒng)寫進(jìn)行演示。如圖1-1


image.png

從圖1-1中可以看出,C哥本地運(yùn)行的有Idea和jconsole兩個(gè)虛擬機(jī)進(jìn)程。

2.內(nèi)存監(jiān)控
Tab頁分為:概述、內(nèi)存、線程、類、VM概要、Mbean。


image.png

其中內(nèi)存頁的內(nèi)容相當(dāng)于可視化的jstat命令。

內(nèi)存監(jiān)控展示
首先編寫一個(gè)java程序,這個(gè)程序用來往java堆中填充數(shù)據(jù),我們來通過jconsole工具的內(nèi)存工具觀察內(nèi)存的變化。

示例代碼:作用以64K/50ms的速度往java堆里面填充數(shù)據(jù),一共填充1000次。

import java.util.List;
import java.util.ArrayList;
public class TestJconsoleHeap{
  static class OOMObject{
    public byte[] placeholder = new byte[64 * 1024];//一個(gè)對(duì)象為64K
  }
  public static void main(String[] args){
    List<OOMObject> list = new ArrayList<>();
    //添加1000次
    for (int i = 0;i < 1000 ;i++ ) {
      //稍作延遲,使得監(jiān)控曲線容易觀察
      try{
          Thread.sleep(50);
      }catch(Exception e){
        
      }

      list.add(new OOMObject());

    }
    System.gc();
  }
}

由于C哥是使用筆記本編寫大代碼,先使用javac編譯該代碼。
javac TestJconsoleHeap.java

然后運(yùn)行該程序,使用終端輸入:
java -Xms100M -Xmx100M -XX:useSerialGC TestJconsoleHeap

然后在啟動(dòng)界面,選擇:

image.png

觀察內(nèi)存監(jiān)控:(動(dòng)圖)


5317394-249fd547428a1e0c.gif

<article class="_2rhmJa">

可以觀察到Eden區(qū)域是折線狀。

3.線程監(jiān)控

線程監(jiān)控相當(dāng)于可視化的jstack,遇到線程停頓的時(shí)候,可以使用它來監(jiān)控。
線程長(zhǎng)時(shí)間停頓的主要原因:等待外部資源(數(shù)據(jù)庫連接、網(wǎng)絡(luò)資源、設(shè)備資源等)、死循環(huán)、鎖等待。

下面分別演示一下這幾種情況。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容