日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

來源:朝雨憶輕塵

cnblogs.com/xifengxiaoma/p/9402497.html

  • JVisualVM 簡介
  • 案例分析
    • 準(zhǔn)備模擬內(nèi)存泄漏樣例
    • 使用JVisualVM分析內(nèi)存泄漏
    • JVisualVM 遠(yuǎn)程監(jiān)控 Tomcat

JVisualVM 簡介

VisualVM 是Netbeans的profile子項目,已在JDK6.0 update 7 中自帶,能夠監(jiān)控線程,內(nèi)存情況,查看方法的CPU時間和內(nèi)存中的對 象,已被GC的對象,反向查看分配的堆棧(如100個String對象分別由哪幾個對象分配出來的)。在JDK_HOME/bin(默認(rèn)是C:Program FilesJAVAjdk1.6.0_13bin)目錄下面,有一個jvisualvm.exe文件,雙擊打開,從UI上來看,這個軟件是基于NetBeans開發(fā)的了。

VisualVM 提供了一個可視界面,用于查看 Java 虛擬機 (Java Virtual machine, JVM) 上運行的基于 Java 技術(shù)的應(yīng)用程序的詳細(xì)信息。VisualVM 對 Java Development Kit (JDK) 工具所檢索的 JVM 軟件相關(guān)數(shù)據(jù)進行組織,并通過一種使您可以快速查看有關(guān)多個 Java 應(yīng)用程序的數(shù)據(jù)的方式提供該信息。您可以查看本地應(yīng)用程序或遠(yuǎn)程主機上運行的應(yīng)用程序的相關(guān)數(shù)據(jù)。此外,還可以捕獲有關(guān) JVM 軟件實例的數(shù)據(jù),并將該數(shù)據(jù)保存到本地系統(tǒng),以供后期查看或與其他用戶共享。

雙擊啟動 jvisualvm.exe,啟動起來后和jconsole 一樣同樣可以選擇本地和遠(yuǎn)程,如果需要監(jiān)控遠(yuǎn)程同樣需要配置相關(guān)參數(shù)。

主界面如下;

有了這款可視化工具,Java 應(yīng)用性能調(diào)優(yōu) so easy

 

VisualVM可以根據(jù)需要安裝不同的插件,每個插件的關(guān)注點都不同,有的主要監(jiān)控GC,有的主要監(jiān)控內(nèi)存,有的監(jiān)控線程等。

有了這款可視化工具,Java 應(yīng)用性能調(diào)優(yōu) so easy

 

如何安裝:

1、從主菜單中選擇“工具”>“插件”。2、在“可用插件”標(biāo)簽中,選中該插件的“安裝”復(fù)選框。單擊“安裝”。3、逐步完成插件安裝程序。

我這里以 Eclipse(pid 22296)為例,雙擊后直接展開,主界面展示了系統(tǒng)和jvm兩大塊內(nèi)容,點擊右下方j(luò)vm參數(shù)和系統(tǒng)屬性可以參考詳細(xì)的參數(shù)信息.

有了這款可視化工具,Java 應(yīng)用性能調(diào)優(yōu) so easy

 

因為VisualVM的插件太多,我這里主要介紹三個我主要使用幾個:監(jiān)控、線程、Visual GC

監(jiān)控的主頁其實也就是,cpu、內(nèi)存、類、線程的圖表

有了這款可視化工具,Java 應(yīng)用性能調(diào)優(yōu) so easy

 

線程和jconsole功能沒有太大的區(qū)別

有了這款可視化工具,Java 應(yīng)用性能調(diào)優(yōu) so easy

 

Visual GC 是常常使用的一個功能,可以明顯的看到年輕代、老年代的內(nèi)存變化,以及gc頻率、gc的時間等。

有了這款可視化工具,Java 應(yīng)用性能調(diào)優(yōu) so easy

 

以上的功能其實jconsole幾乎也有,VisualVM更全面更直觀一些,另外VisualVM非常多的其它功能,可以分析dump的內(nèi)存快照,

dump出來的線程快照并且進行分析等,還有其它很多的插件大家可以去探索

有了這款可視化工具,Java 應(yīng)用性能調(diào)優(yōu) so easy

 

案例分析

準(zhǔn)備模擬內(nèi)存泄漏樣例

1、定義靜態(tài)變量HashMap

2、分段循環(huán)創(chuàng)建對象,并加入HashMap

代碼如下:

import java.util.HashMap;
import java.util.Map;
public class CyclicDependencies {
    //聲明緩存對象
    private static final Map map = new HashMap();
    public static void main(String args[]){
        try {
            Thread.sleep(10000);//給打開visualvm時間
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //循環(huán)添加對象到緩存
        for(int i=0; i<1000000;i++){
            TestMemory t = new TestMemory();
            map.put("key"+i,t);
        }
        System.out.println("first");
        //為dump出堆提供時間
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        for(int i=0; i<1000000;i++){
            TestMemory t = new TestMemory();
            map.put("key"+i,t);
        }
        System.out.println("second");
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        for(int i=0; i<3000000;i++){
            TestMemory t = new TestMemory();
            map.put("key"+i,t);
        }
        System.out.println("third");
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        for(int i=0; i<4000000;i++){
            TestMemory t = new TestMemory();
            map.put("key"+i,t);
        }
        System.out.println("forth");
        try {
            Thread.sleep(Integer.MAX_VALUE);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("qqqq");
    }
}

3、配置jvm參數(shù)如下:

         -Xms512m
         -Xmx512m
         -XX:-UseGCOverheadLimit
         -XX:MaxPermSize=50m

4、運行程序并打卡visualvm監(jiān)控

使用JVisualVM分析內(nèi)存泄漏

1、查看Visual GC標(biāo)簽,內(nèi)容如下,這是輸出first的截圖

有了這款可視化工具,Java 應(yīng)用性能調(diào)優(yōu) so easy

 

這是輸出forth的截圖:

有了這款可視化工具,Java 應(yīng)用性能調(diào)優(yōu) so easy

 

通過2張圖對比發(fā)現(xiàn):

有了這款可視化工具,Java 應(yīng)用性能調(diào)優(yōu) so easy

 


有了這款可視化工具,Java 應(yīng)用性能調(diào)優(yōu) so easy

 

老生代一直在gc,當(dāng)程序繼續(xù)運行可以發(fā)現(xiàn)老生代gc還在繼續(xù):

有了這款可視化工具,Java 應(yīng)用性能調(diào)優(yōu) so easy

 

增加到了7次,但是老生代的內(nèi)存并沒有減少。說明存在無法被回收的對象,可能是內(nèi)存泄漏了。

如何分析是那個對象泄漏了呢?打開抽樣器標(biāo)簽:點擊后如下圖:

有了這款可視化工具,Java 應(yīng)用性能調(diào)優(yōu) so easy

 

按照程序輸出進行堆dump,當(dāng)輸出second時,dump一次,當(dāng)輸出forth時dump一次。

進入最后dump出來的堆標(biāo)簽,點擊類:

有了這款可視化工具,Java 應(yīng)用性能調(diào)優(yōu) so easy

 

點擊右上角:“與另一個堆存儲對比”。如圖選擇第一次導(dǎo)出的dump內(nèi)容比較:

有了這款可視化工具,Java 應(yīng)用性能調(diào)優(yōu) so easy

 

比較結(jié)果如下:

有了這款可視化工具,Java 應(yīng)用性能調(diào)優(yōu) so easy

 

可以看出在兩次間隔時間內(nèi)TestMemory對象實例一直在增加并且多了,說明該對象引用的方法可能存在內(nèi)存泄漏。

如何查看對象引用關(guān)系呢?

右鍵選擇類TestMemory,選擇“在實例視圖中顯示”,如下所示:

有了這款可視化工具,Java 應(yīng)用性能調(diào)優(yōu) so easy

 

左側(cè)是創(chuàng)建的實例總數(shù),右側(cè)上部為該實例的結(jié)構(gòu),下面為引用說明,從圖中可以看出在類CyclicDependencies里面被引用了,并且被HashMap引用。

如此可以確定泄漏的位置,進而根據(jù)實際情況進行分析解決。

JVisualVM 遠(yuǎn)程監(jiān)控 Tomcat

1、修改遠(yuǎn)程tomcat的catalina.sh配置文件,在其中增加:

  1. JAVA_OPTS="$JAVA_OPTS
  2. -Djava.rmi.server.hostname=192.168.122.128
  3. -Dcom.sun.management.jmxremote.port=18999
  4. -Dcom.sun.management.jmxremote.ssl=false
  5. -Dcom.sun.management.jmxremote.authenticate=false"這次配置先不走權(quán)限校驗。只是打開jmx端口。2、打開jvisualvm,右鍵遠(yuǎn)程,選擇添加遠(yuǎn)程主機:
有了這款可視化工具,Java 應(yīng)用性能調(diào)優(yōu) so easy

 

3、輸入主機的名稱,直接寫ip,如下:

有了這款可視化工具,Java 應(yīng)用性能調(diào)優(yōu) so easy

 

右鍵新建的主機,選擇添加JMX連接,輸入在tomcat中配置的端口即可。

4、雙擊打開。完畢!

參考資料

http://blog.csdn.net/kl28978113/article/details/53817827

http://www.cnblogs.com/ityouknow/p/6437037.html

分享到:
標(biāo)簽:性能 Java
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定