亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用jvisualvm配合Visual GC插件監(jiān)控Java程序詳細(xì)總結(jié)

 更新時間:2021年09月24日 09:43:52   作者:沒頭腦遇到不高興  
本節(jié)將會介紹一下jvisualvm的特性及作用、各個功能是如何使用的、最后會介紹jvisualvm的插件Visual GC的安裝及使用

jvisualvm介紹

VisualVM(All-in-One Java Troubleshooting Tool)是到目前為止隨JDK發(fā)布的功能最強(qiáng)大的運(yùn)行監(jiān)視和故障處理程序,它提供了運(yùn)行監(jiān)視、故障處理、性能分析(Profiling)等功能。VisuaIVM有一個很大的優(yōu)點:不需要被監(jiān)視的程序基于特殊Agent運(yùn)
行,因此它對應(yīng)用程序的實際性能的影響很小,使得它可以直接應(yīng)用在生產(chǎn)環(huán)境中。

jdk8的文檔中https://docs.oracle.com/javase/8/docs/technotes/tools/unix/index.html就有jvisualvm的使用介紹,

jvisualvm的官網(wǎng)介紹地址為:https://docs.oracle.com/javase/8/docs/technotes/guides/visualvm/index.html 。

VisualVM基于NetBeans平臺開發(fā),因此它一開始就具備了插件擴(kuò)展功能的特性,通過插件擴(kuò)展支持,visualVM可以做到:

  • 顯示虛擬機(jī)進(jìn)程以及進(jìn)程的配置、環(huán)境信息(jps、jinfo)。
  • 監(jiān)視應(yīng)用程序的CPU、GC、堆、方法區(qū)以及線程的信息(jstat、jstack)。
  • dump以及分析堆轉(zhuǎn)儲快照(jmap、jhat)·
  • 方法級的程序運(yùn)行性能分析,找出被調(diào)用最多、運(yùn)行時間最長的方法。
  • 離線程序快照:收集程序的運(yùn)行時配置、線程dump、內(nèi)存dump等信息建立一個快照,可以將快照發(fā)送開發(fā)者處進(jìn)行Bug反饋。
  • 其他plugins的無限的可能性(常用的Visual GC,BTrace,Threads Inspector )……

VisualvM可以監(jiān)控本地和遠(yuǎn)程的Java應(yīng)用程序,可能會有部分功能在監(jiān)控遠(yuǎn)程應(yīng)用程序時無法使用。在jdk安裝目錄\bin的命令中找到j(luò)visualvm.exe雙擊打開即可使用。

jvisualvm使用介紹

打開jvisualvm后,可以看到如下界面,其可以監(jiān)控本地和遠(yuǎn)程的Java應(yīng)用程序,圖中紅框圈住的是本地程序,左側(cè)顯示的com.wkp.jvm.ServiceapiApplication (pid 8700)其實相當(dāng)于 jps -l 命令的輸出。可以看到有概述、監(jiān)視、線程、抽樣器和Profiler這幾個功能菜單,而Visual GC是添加的插件,默認(rèn)是沒有的(下面會介紹這個插件)。

1、概述里面顯示了JDK的版本、PID、JVM參數(shù)、系統(tǒng)屬性等(相當(dāng)于java -version,jps,jinfo等命令)。

Java應(yīng)用程序如果想能夠遠(yuǎn)程連接監(jiān)控,可以通過JMX和jstatd,如果使用JMX則啟動時要添加JMX相關(guān)的參數(shù)(具體的遠(yuǎn)程連接感興趣的話,可以自己找文章看一下哈):

nohup java -jar -Djava.rmi.server.hostname=192.168.74.4 -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false test.jar &

2、監(jiān)視菜單,可以看到如下界面:展示了CPU使用情況、堆內(nèi)存大小及占用情況、類的裝載和線程情況。點擊堆Dump按鈕會生成堆dump文件,相當(dāng)于jmap命令。

雙擊打開上面生成的dump文件,可以看到如下所示:點擊顯示線程信息會看到線程dump信息(跟jstack命令輸出的一樣),然后還有類、實例數(shù)和OQL控制臺,這個和前面介紹的MAT類似。

點擊類按鈕,會看到如下所示:可以看到類的實例數(shù)、大小等,還有一個重要功能"與另一個堆存儲進(jìn)行比較",

可以在執(zhí)行GC前后分別產(chǎn)生堆dump文件,然后進(jìn)行對比分析哪些對象有了變化、是如何變化的。

3、線程菜單, 可以看到所有的線程信息:線程數(shù)量、線程狀態(tài)、線程名稱、線程運(yùn)行時間等,點擊線程Dump按鈕會跟jstack命令一樣生成線程dump文件。

4、抽樣器菜單,點擊“CPU”按鈕啟動一個 CPU 性能分析會話 ,VisualVM 會檢測應(yīng)用程序所有的被調(diào)用的方法。當(dāng)進(jìn)入一個方法時,線程會發(fā)出一個“method entry”的事件,當(dāng)退出方法時同樣會發(fā)出一個“method exit”的事件,這些事件都包含了時間戳。然后 VisualVM 會把每個被調(diào)用方法的總的執(zhí)行時間和調(diào)用的次數(shù)按照運(yùn)行時長展示出來。

此外,我們也可以通過性能分析結(jié)果下方的方法名過濾器對分析結(jié)果進(jìn)行過濾。

點擊抽樣器中的內(nèi)存會看Java程序中的類的實例數(shù)、線程分配的內(nèi)存等信息。

5、Profiler分析器:跟上面的抽樣器類似,也可以選擇CPU或者內(nèi)存進(jìn)行監(jiān)控,這里就不貼圖了。

如果你是通過雙擊jvisualvm.exe打開的,則在你點擊Profiler中的CPU或者內(nèi)存的時候會出現(xiàn) VisualVm的Profiler一直轉(zhuǎn)圈:正在連接到目標(biāo)VM,解決方式就是通過命令啟動,并且添加啟動參數(shù)即可解決。

jvisualvm -J-Dorg.netbeans.profiler.separateConsole=true //-J即表示JVM OPTION:允許帶JVM參數(shù)啟動

C:\Program Files\java8\jdk1.8.0_112\bin>jvisualvm -J-Dorg.netbeans.profiler.separateConsole=true

點擊Profiler中的CPU會顯示方法的執(zhí)行時間、調(diào)用次數(shù)等

點擊Profiler中的內(nèi)存會對內(nèi)存進(jìn)行分析,會顯示分配的對象,對象的大小,對象的年齡等信息。

Visual GC插件安裝及使用

jvisulaVM如何添加插件:https://visualvm.github.io/index.html,visual GC插件下載地址為:https://visualvm.github.io/pluginscenters.html,根據(jù)自己的jdk版本選擇對應(yīng)的插件版本,并復(fù)制插件下載鏈接

點擊VisualVm的工具->插件,開始的時候可能可用插件顯示為0,可用在設(shè)置里面添加,把上面的鏈接地址復(fù)制進(jìn)去,確定之后可用插件列表里面就可以看到了。在可用插件列表中選中,然后點擊安裝,安裝完成后重啟即可看到Visual GC插件。

打開Visual GC插件可以看到整個區(qū)域分為三部分:spaces、graphs、histogram

1,spaces區(qū)域:代表虛擬機(jī)內(nèi)存分布情況。從圖中可以看出,虛擬機(jī)被分為Metaspace、Old、Eden、S0、S1

2,Graphs區(qū)域:內(nèi)存使用詳細(xì)介紹

  • Compile Time(編譯時間):圖中顯示編譯了4070個類總耗時14.026s,一個駝峰表示一次JIT編譯,越窄表示時間越短
  • Class Loader Time(類加載時間):表示加載、卸載類的數(shù)量、總消耗時間
  • GC Time(GC Time):顯示GC次數(shù)、耗時、最近垃圾收集的原因
  • Eden Space(Eden 區(qū)):括號內(nèi)的8.500M表示最大容量,8.500M表示當(dāng)前容量,后面的2.259M表示當(dāng)前占用空間,42 collections表示垃圾收集次數(shù),239.693ms表示垃圾收集花費時間
  • Survivor 0/Survivor 1(S0和S1區(qū)):和Eden Space類似
  • Old Gen(老年代):和Eden Space類似
  • Metaspace(元空間):表示最大空間、當(dāng)前空間、當(dāng)前占用大小。

3,histogram:顯示survivor區(qū)域?qū)ο蟮哪挲g

Visual GC的histogram可能會顯示不受此JVM支持,因為是垃圾收集器的原因,Java應(yīng)用默認(rèn)使用UseParallelGC 并行收集器,這時候是不顯示的,不用并行收集器就可以了,例如改為CMS+Parnew就能正常顯示。

  • Tenuring Threshold:表示新生代年齡大于當(dāng)前值則進(jìn)入老年代
  • Max Tenuring Threshold:表示新生代最大年齡值。
  • Tenuring Threshold與Max Tenuring Threshold區(qū)別:Max Tenuring Threshold是一個最大限定,所有的新生代年齡都不能超過當(dāng)前值,而Tenuring Threshold是個動態(tài)計算出來的臨時值,一般情況與Max Tenuring Threshold相等,如果在Suivivor空間中,相同年齡所有對象大小的總和大于Survivor空間的一半,則年齡大于或者等于該年齡的對象就都可以直接進(jìn)入老年代(如果計算出來年齡段是6,則Tenuring Threshold=6,age>=6的Suivivor對象都符合要求),它才是新生代是否進(jìn)入老年代判斷的依據(jù)。
  • Desired Survivor Size:Survivor空間大小驗證闕值(默認(rèn)是survivor空間的一半),用于Tenuring Threshold判斷對象是否提前進(jìn)入老年代。
  • Current Survivor Size:當(dāng)前survivor空間大小

到此這篇關(guān)于使用jvisualvm配合Visual GC插件監(jiān)控Java程序詳細(xì)總結(jié)的文章就介紹到這了,更多相關(guān)jvisualvm 配合 Visual GC監(jiān)控Java程序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mybatis?sql與xml文件讀取方法詳細(xì)分析

    Mybatis?sql與xml文件讀取方法詳細(xì)分析

    這篇文章主要介紹了Mybatis?sql與xml文件讀取方法,在執(zhí)行一個自定義sql語句時,dao對應(yīng)的代理對象時如何找到sql,也就是dao的代理對象和sql之間的關(guān)聯(lián)關(guān)系是如何建立的
    2023-01-01
  • Mybatis-Plus如何配置分頁對象

    Mybatis-Plus如何配置分頁對象

    本文主要介紹了Mybatis-Plus如何配置分頁對象,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 完美解決Java獲取文件路徑出現(xiàn)亂碼的問題

    完美解決Java獲取文件路徑出現(xiàn)亂碼的問題

    今天小編就為大家分享一篇完美解決Java獲取文件路徑出現(xiàn)亂碼的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • SpringBoot如何在線程中獲取@Service Bean類

    SpringBoot如何在線程中獲取@Service Bean類

    這篇文章主要介紹了SpringBoot如何在線程中獲取@Service Bean類,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • java郵件發(fā)送簡單實現(xiàn)代碼

    java郵件發(fā)送簡單實現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了java郵件發(fā)送簡單實現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • java報錯:“錯誤:編碼GBK?的不可映射字符”解決辦法

    java報錯:“錯誤:編碼GBK?的不可映射字符”解決辦法

    當(dāng)Java源代碼中包含中文字符時,我們在用javac編譯時會出現(xiàn)“錯誤:編碼GBK的不可映射字符”,這篇文章主要給大家介紹了關(guān)于java報錯:“錯誤:編碼GBK?的不可映射字符”的解決辦法,需要的朋友可以參考下
    2024-08-08
  • Java實現(xiàn)樹形結(jié)構(gòu)管理的組合設(shè)計模式

    Java實現(xiàn)樹形結(jié)構(gòu)管理的組合設(shè)計模式

    Java組合模式是一種結(jié)構(gòu)型設(shè)計模式,它允許將對象組合成樹形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu)。組合模式使得用戶可以使用統(tǒng)一的方式處理單個對象和對象組合,從而簡化了系統(tǒng)的設(shè)計和維護(hù)
    2023-04-04
  • Java之進(jìn)程和線程的區(qū)別

    Java之進(jìn)程和線程的區(qū)別

    這篇文章主要介紹了進(jìn)程與線程的區(qū)別,線程具有許多傳統(tǒng)進(jìn)程所具有的特征,而把傳統(tǒng)的進(jìn)程稱為重型進(jìn)程(Heavy—Weight Process),它相當(dāng)于只有一個線程的任務(wù),有感興趣的小伙伴可以參考閱讀本文
    2023-03-03
  • Spring如何通過注解存儲和讀取對象詳解

    Spring如何通過注解存儲和讀取對象詳解

    在Spring中,要想更簡單的存儲和讀取對象的核心是使用注解,這篇文章主要給大家介紹了關(guān)于Spring如何通過注解存儲和讀取對象的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • 史上最通俗理解的Java死鎖代碼演示

    史上最通俗理解的Java死鎖代碼演示

    這篇文章主要給大家介紹了關(guān)于Java死鎖代碼演示的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09

最新評論