欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

使用VisualVM分析高并發(fā)項目性能的方法

VisualVM是一個集成多個JDK命令行工具的可視化工具??梢宰鳛镴ava應用程序性能分析和運行監(jiān)控的工具。開發(fā)人員可以利用它來監(jiān)控、分析線程信息,瀏覽內(nèi)存堆數(shù)據(jù)。系統(tǒng)管理員可以利用它來監(jiān)測、控制Java應用程序橫跨整個網(wǎng)絡的情況。Java應用程序使用人員可以利用它來創(chuàng)建包含所有必要信息的Bug 報告。

安寧網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、響應式網(wǎng)站設計等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)成立于2013年到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選創(chuàng)新互聯(lián)。

1 為什么需要

開發(fā)大型 Java 應用程序的過程中難免遇到內(nèi)存泄露、性能瓶頸等問題,比如文件、網(wǎng)絡、數(shù)據(jù)庫的連接未釋放,未優(yōu)化的算法等。隨著應用程序的持續(xù)運行,可能會造成整個系統(tǒng)運行效率下降,嚴重的則會造成系統(tǒng)崩潰。為了找出程序中隱藏的這些問題,在項目開發(fā)后期往往會使用性能分析工具來對應用程序的性能進行分析和優(yōu)化。

2 如何安裝

這里有兩種方式:

  • 沒有按照IDEA插件

如果沒有按照IDEA插件的話,我們需要找到JDK的按照目錄bin下找到如下執(zhí)行程序。

使用VisualVM分析高并發(fā)項目性能的方法

然后雙擊執(zhí)行,就會出現(xiàn)界面,如下;

使用VisualVM分析高并發(fā)項目性能的方法

但是,我們一般使用IDEA,所以會使用插件,就是下面這種方式。

  • 按照IDEA插件

先在插件中找到VisualVM安裝;

使用VisualVM分析高并發(fā)項目性能的方法

安裝了之后,在運行的地方就會多出現(xiàn)兩個VisualVM的運行按鈕;
使用VisualVM分析高并發(fā)項目性能的方法

這樣運行程序之后,就可以自動打開VisualVM程序了。

3 基本介紹

這一部分先對這個工具做一個簡要的介紹,看看基本有哪些我們會用到的功能。

在沒有添加其他插件的時候,是只有下面幾個功能的。

使用VisualVM分析高并發(fā)項目性能的方法

3.1 概述

使用VisualVM分析高并發(fā)項目性能的方法

如上圖所示,概述基本上都是我們的系統(tǒng)屬性、運行程序時設置的JVM參數(shù)等信息的展示,所以,這一部分可以讓我們查看這些信息。

3.2 監(jiān)視

使用VisualVM分析高并發(fā)項目性能的方法

監(jiān)視這個界面的功能還是很有作用的,可以看到cup運行情況、堆的使用情況、類的情況以及線程的動態(tài)情況。

因此,我們可以利用這個界面查看cpu情況好不好,更重要的是,我們可以查看堆的使用情況,這對于我們分析JVM還是非常重要的。

3.3 線程

使用VisualVM分析高并發(fā)項目性能的方法

如上圖所以,可以看到所有的線程的情況,是運行、休眠、等待、駐留、監(jiān)視等情況。

注意,以上這些都不是關(guān)鍵,關(guān)鍵是VisualVM中還有一個很重要的功能,可以添加插件獲取更多的功能。

3.4 插件添加

正是因為有了插件的擴展功能,所以這個工具才如此強大,VisualVM可以做到以下:

  • 顯示虛擬機進程以及進程的配置、環(huán)境信息、jps、jinfo。
  • 監(jiān)視應用程序的cpu、GC、堆、方法區(qū)以及線程的信息(jstat、jstack)。
  • dump以及分析堆轉(zhuǎn)存儲快照(jmap、jhat)。
  • 還有很多其他的功能。

在工具->找到可用插件,安裝即可。

使用VisualVM分析高并發(fā)項目性能的方法

下一部分我們就利用已經(jīng)安裝的插件Visual GC進行分析。

4 利用Visual GC分析虛擬機內(nèi)存區(qū)域

這部分會用到一些Java虛擬機的一些基礎(chǔ)知識,所以,查看這部分之前,請先查看這篇文章:。

使用VisualVM分析高并發(fā)項目性能的方法

在這個界面分為以下幾個部分。

  • space(Metaspace(元數(shù)據(jù))、Old老年代、新生代(Eden、S0、S1))
  • Graphs(Compile Time(編譯時間)、Class Loader Time(類加載時間)、GC Time(垃圾收集時間)、Eden Space、Survivor 0、Survivor 1、Old Gen、Metaspace)
  • Histogram(Parameters參數(shù)設置)

那么知道這些參數(shù)之后,怎么去分析虛擬機到底運行是好是壞呢,這個時候,我們需要了解一些Java虛擬機基礎(chǔ)的優(yōu)化知識。

首先,需要了解一些GC優(yōu)化的原則。

  • 多數(shù)的Java應用不需要在服務器上進行GC優(yōu)化;
  • 多數(shù)導致GC問題的Java應用,都不是因為我們參數(shù)設置錯誤,而是代碼問題;
  • 在應用上線之前,先考慮將機器的JVM參數(shù)設置到最優(yōu)(最適合);
  • 減少創(chuàng)建對象的數(shù)量;
  • 減少使用全局變量和大對象;
  • GC優(yōu)化是到最后不得已才采用的手段;
  • 在實際使用中,分析GC情況優(yōu)化代碼比優(yōu)化GC參數(shù)要多得多;

另外,我們需要知道我們GC優(yōu)化的目的。

  • 將轉(zhuǎn)移到老年代的對象數(shù)量降低到最?。?/li>
  • 減少full GC的執(zhí)行時間;

一般,我們需要執(zhí)行的有以下幾點;

  • 減少使用全局變量和大對象;
  • 調(diào)整新生代的大小到最合適;
  • 設置老年代的大小為最合適;
  • 選擇合適的GC收集器;

至于怎么算合適,后面我會通過一個實例講解。

其實,如果想要知道更多JVM內(nèi)存分配和回收策略的原理,可以查看這篇文章:JVM內(nèi)存分配和回收策略的原理。

一般我們執(zhí)行了我們的程序之后,接下來就是需要查看GC的狀態(tài)了,接著分析結(jié)果,判斷是否需要進行優(yōu)化。

一般如果達到以下的指標,就不需要進行GC了。

  • Minor GC執(zhí)行時間不到50ms,Minor GC執(zhí)行不頻繁,約10秒一次;
  • Full GC執(zhí)行時間不到1s,Full GC執(zhí)行頻率不算頻繁,不低于10分鐘1次;
實例 1

我們先看一個GC狀態(tài)需要優(yōu)化的例子,在這個實例中,我們給堆分配的最大最小的值都是64M(很小的堆大小)。

GC狀態(tài)差情況分析
/**
 * VM Args:-Xms64m -Xmx64m -XX:+HeapDumpOnOutOfMemoryError
 * @author 歐陽思海
 */
public class HeapTest {

    static class StaticObject {
    }

    public static void main(String[] args) {
        List<StaticObject> list = new ArrayList<StaticObject>();
        int i = 1;

        //不斷的向堆中添加對象
        while (true) {
            list.add(new StaticObject());
            i++;
            System.out.println(i);
            System.out.println(list.size());
        }
    }
}

使用VisualVM分析高并發(fā)項目性能的方法

由于分配的堆內(nèi)存太小,所以導致,堆溢出。

接著我們查看一下Visual GC的監(jiān)視情況。

  • 監(jiān)視界面情況

使用VisualVM分析高并發(fā)項目性能的方法

我們可以從堆的使用情況看出,基本已經(jīng)使用完。

  • Visual GC監(jiān)視情況

使用VisualVM分析高并發(fā)項目性能的方法

從上圖可知,在短短的運行時間中,Eden進行了49次GC,雖然時間短,但是能說明一個問題,新生代堆內(nèi)存分配的空間太小,導致頻繁GC。

同時,Old老年代也進行了33次GC,雖然運行時間也在不需要優(yōu)化的范圍內(nèi),而且從Survivor可以看出,基本沒有GC,說明這些都是大對象,直接進入到了Old老年代,導致GC頻繁。

所以,我們需要進行的優(yōu)化就是加大新生代和老年代堆內(nèi)存的大小,同時減少大對象的產(chǎn)生。

參數(shù)優(yōu)化分析

我們將VM參數(shù)改為:-Xms512m -Xmx512m -Xmn128m -XX:+HeapDumpOnOutOfMemoryError,運行大概5分鐘再次查看結(jié)果。

使用VisualVM分析高并發(fā)項目性能的方法

首先沒有出現(xiàn)堆內(nèi)存溢出。

  • 監(jiān)視情況

使用VisualVM分析高并發(fā)項目性能的方法

加大了堆內(nèi)存,所以堆內(nèi)存沒有出現(xiàn)問題。

  • Visual GC監(jiān)視情況

使用VisualVM分析高并發(fā)項目性能的方法

加大了堆內(nèi)存之后,Eden新生代進行了66次GC,使用時間3.381s基本滿足要求(執(zhí)行時間不到50ms,Minor GC執(zhí)行不頻繁,約10秒一次),同時老年代old進行了2次GC,使用時間4.127s,這里還是有待優(yōu)化的,不太滿足優(yōu)化要求。

  • dump文件分析

使用VisualVM分析高并發(fā)項目性能的方法

點擊堆 dump這個按鈕就會生成 dump文件,我們可以分析類及對象的一些情況。

使用VisualVM分析高并發(fā)項目性能的方法

分析之后發(fā)現(xiàn),StaticObject對象大多,沒有進行GC,問題主要在這里,所以,下一步需要解決這個問題。

通過以上分析可以說明一個問題,加大了堆內(nèi)存之后,新生代和老年代的GC情況大大的改善了,但是還有大對象的問題,所以還有待優(yōu)化。

修改大對象,進行GC

修改程序,如下:

/**
 * VM Args:-Xms512m -Xmx512m -Xmn128m -XX:+HeapDumpOnOutOfMemoryError
 *
 * @author 歐陽思海
 */
public class HeapTest {

   /* static class StaticObject {
    }*/

    public static void main(String[] args) {
        int i = 1;

        while (true) {
            i++;
            System.out.println(i);
        }

    }
}
  • 監(jiān)視情況

使用VisualVM分析高并發(fā)項目性能的方法

堆一直運行良好。

  • Visual GC監(jiān)視情況

使用VisualVM分析高并發(fā)項目性能的方法

這次相對于上次相比,老年代的情況已經(jīng)改善了,沒有GC,說明大對象不存在了。

通過上面的分析跟優(yōu)化,就滿足GC的需求了,不需要再優(yōu)化了。

網(wǎng)頁標題:使用VisualVM分析高并發(fā)項目性能的方法
文章鏈接:http://aaarwkj.com/article34/gjospe.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供自適應網(wǎng)站、網(wǎng)站收錄網(wǎng)站內(nèi)鏈、小程序開發(fā)、服務器托管、微信公眾號

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)
大胆丰满邻居少妇在线观看| 清纯唯美亚洲自拍第一页| 日韩av大片一区二区三区| 亚洲最大午夜福利视频| 日本一区二区在线观看视频| 草逼免费在线观看视频| 国产精品一区在线免费看| 国产亚洲精品精品国产亚洲| 日韩欧美国产精品自拍| 午夜视频在线观看区一| 日本激情人妻一区二区| 人人爽久久爱夜夜躁一区| 国产亚洲精品久久久9| 亚洲欧美一区二区国产| 免费av在线网址网站| 国产成人一区二区三区影| 黄色三级亚洲男人的天堂| 丰满熟妇久久人妻同堂av| 五月婷婷综合中文字幕在线| 亚洲天堂成人综合在线| 强乱人妻中文字幕日本| 国产做a爰片久久91| 欧美口爆吞精在线观看| 国产精品午夜视频免费观看| 久久日韩人妻中文字幕| 精品人妻一区二区三区乱码| 在线国产一区二区不卡| 国产成人精品久久久亚洲| 亚洲欧美午夜福利视频| 青青草av一区二区三区| 欧美福利免费在线视频| 亚洲国产欧美日韩一区| 欧美女人又粗又长亚洲| 天堂中文在线免费观看av| 91欧美在线激情视频| 亚洲成人av福利网站| 亚洲丰满性感美女av| 久久精品一区二区熟女| 国产原创av剧情在线播放| 日本视频三区在线播放| 91内射视频在线播放|