欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2021年09月24日 09:43:52   作者:沒(méi)頭腦遇到不高興  
本節(jié)將會(huì)介紹一下jvisualvm的特性及作用、各個(gè)功能是如何使用的、最后會(huì)介紹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有一個(gè)很大的優(yōu)點(diǎn):不需要被監(jiān)視的程序基于特殊Agent運(yùn)
行,因此它對(duì)應(yīng)用程序的實(shí)際性能的影響很小,使得它可以直接應(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平臺(tái)開(kāi)發(fā),因此它一開(kāi)始就具備了插件擴(kuò)展功能的特性,通過(guò)插件擴(kuò)展支持,visualVM可以做到:

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

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

jvisualvm使用介紹

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

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

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

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)存大小及占用情況、類(lèi)的裝載和線(xiàn)程情況。點(diǎn)擊堆Dump按鈕會(huì)生成堆dump文件,相當(dāng)于jmap命令。

雙擊打開(kāi)上面生成的dump文件,可以看到如下所示:點(diǎn)擊顯示線(xiàn)程信息會(huì)看到線(xiàn)程dump信息(跟jstack命令輸出的一樣),然后還有類(lèi)、實(shí)例數(shù)和OQL控制臺(tái),這個(gè)和前面介紹的MAT類(lèi)似。

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

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

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

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

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

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

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

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

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

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

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

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

Visual GC插件安裝及使用

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

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

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

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

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

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

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

Visual GC的histogram可能會(huì)顯示不受此JVM支持,因?yàn)槭抢占鞯脑?,Java應(yīng)用默認(rèn)使用UseParallelGC 并行收集器,這時(shí)候是不顯示的,不用并行收集器就可以了,例如改為CMS+Parnew就能正常顯示。

  • Tenuring Threshold:表示新生代年齡大于當(dāng)前值則進(jìn)入老年代
  • Max Tenuring Threshold:表示新生代最大年齡值。
  • Tenuring Threshold與Max Tenuring Threshold區(qū)別:Max Tenuring Threshold是一個(gè)最大限定,所有的新生代年齡都不能超過(guò)當(dāng)前值,而Tenuring Threshold是個(gè)動(dòng)態(tài)計(jì)算出來(lái)的臨時(shí)值,一般情況與Max Tenuring Threshold相等,如果在Suivivor空間中,相同年齡所有對(duì)象大小的總和大于Survivor空間的一半,則年齡大于或者等于該年齡的對(duì)象就都可以直接進(jìn)入老年代(如果計(jì)算出來(lái)年齡段是6,則Tenuring Threshold=6,age>=6的Suivivor對(duì)象都符合要求),它才是新生代是否進(jìn)入老年代判斷的依據(jù)。
  • Desired Survivor Size:Survivor空間大小驗(yàn)證闕值(默認(rèn)是survivor空間的一半),用于Tenuring Threshold判斷對(duì)象是否提前進(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

    Mybatis-Plus如何配置分頁(yè)對(duì)象

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

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

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

    SpringBoot如何在線(xiàn)程中獲取@Service Bean類(lèi)

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

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

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

    java報(bào)錯(cuò):“錯(cuò)誤:編碼GBK?的不可映射字符”解決辦法

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

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

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

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

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

    Spring如何通過(guò)注解存儲(chǔ)和讀取對(duì)象詳解

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

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

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

最新評(píng)論