最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

jvisualvm介紹

VisualVM(All-in-One Java Troubleshooting Tool)是到目前為止隨JDK發(fā)布的功能最強大的運行監(jiān)視和故障處理程序,它提供了運行監(jiān)視、故障處理、性能分析(Profiling)等功能。VisuaIVM有一個很大的優(yōu)點:不需要被監(jiān)視的程序基于特殊Agent運
行,因此它對應用程序的實際性能的影響很小,使得它可以直接應用在生產(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ā),因此它一開始就具備了插件擴展功能的特性,通過插件擴展支持,visualVM可以做到:

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

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

jvisualvm使用介紹

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

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

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

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文件,相當于jmap命令。

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

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

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

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

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

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

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

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

如果你是通過雙擊jvisualvm.exe打開的,則在你點擊Profiler中的CPU或者內(nèi)存的時候會出現(xiàn) VisualVm的Profiler一直轉(zhuǎn)圈:正在連接到目標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)存進行分析,會顯示分配的對象,對象的大小,對象的年齡等信息。

Visual GC插件安裝及使用

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

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

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

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

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

  • 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表示當前容量,后面的2.259M表示當前占用空間,42 collections表示垃圾收集次數(shù),239.693ms表示垃圾收集花費時間
  • Survivor 0/Survivor 1(S0和S1區(qū)):和Eden Space類似
  • Old Gen(老年代):和Eden Space類似
  • Metaspace(元空間):表示最大空間、當前空間、當前占用大小。

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

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

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

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

相關(guān)文章

  • Netty分布式Server啟動流程服務(wù)端初始化源碼分析

    Netty分布式Server啟動流程服務(wù)端初始化源碼分析

    本章主要講解server啟動的關(guān)鍵步驟,?讀者只需要了解server啟動的大概邏輯,?知道關(guān)鍵的步驟在哪個類執(zhí)行即可,?并不需要了解每一步的運作機制,?之后會對每個模塊進行深度分析
    2022-03-03
  • Java多線程中的wait/notify通信模式實例詳解

    Java多線程中的wait/notify通信模式實例詳解

    這篇文章主要給大家介紹了關(guān)于Java多線程中wait/notify通信模式的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • 解決SpringBoot運行報錯:找不到或無法加載主類的問題

    解決SpringBoot運行報錯:找不到或無法加載主類的問題

    這篇文章主要介紹了解決SpringBoot運行報錯:找不到或無法加載主類的問題,具有很好的參考價值,對大家的學習或工作有一定的參考價值,需要的朋友可以參考下
    2023-09-09
  • Java由淺入深帶你精通繼承super

    Java由淺入深帶你精通繼承super

    繼承就是子類繼承父類的特征和行為,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為
    2022-03-03
  • Spring多數(shù)據(jù)源切換失敗,發(fā)現(xiàn)與事務(wù)相關(guān)問題

    Spring多數(shù)據(jù)源切換失敗,發(fā)現(xiàn)與事務(wù)相關(guān)問題

    這篇文章主要介紹了Spring多數(shù)據(jù)源切換失敗,發(fā)現(xiàn)與事務(wù)相關(guān)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 詳解java如何正確使用volatile

    詳解java如何正確使用volatile

    這篇文章給大家分享了java如何正確使用volatile的相關(guān)知識點內(nèi)容,有興趣的朋友可以參考學習下。
    2018-07-07
  • Javaweb實現(xiàn)在線人數(shù)統(tǒng)計代碼實例

    Javaweb實現(xiàn)在線人數(shù)統(tǒng)計代碼實例

    這篇文章主要介紹了Javaweb實現(xiàn)在線人數(shù)統(tǒng)計代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • springboot業(yè)務(wù)功能實戰(zhàn)之告別輪詢websocket的集成使用

    springboot業(yè)務(wù)功能實戰(zhàn)之告別輪詢websocket的集成使用

    WebSocket使得客戶端和服務(wù)器之間的數(shù)據(jù)交換變得更加簡單,允許服務(wù)端主動向客戶端推送數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于springboot業(yè)務(wù)功能實戰(zhàn)之告別輪詢websocket的集成使用,需要的朋友可以參考下
    2022-10-10
  • 使用springboot單元測試對weblistener的加載測試

    使用springboot單元測試對weblistener的加載測試

    這篇文章主要介紹了使用springboot單元測試對weblistener的加載測試,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java并發(fā)工具類Phaser詳解

    Java并發(fā)工具類Phaser詳解

    這篇文章主要介紹了Java并發(fā)工具類Phaser詳解,Phaser(階段協(xié)同器)是一個Java實現(xiàn)的并發(fā)工具類,用于協(xié)調(diào)多個線程的執(zhí)行,它提供了一些方便的方法來管理多個階段的執(zhí)行,可以讓程序員靈活地控制線程的執(zhí)行順序和階段性的執(zhí)行,需要的朋友可以參考下
    2023-11-11

最新評論

连山| 呼和浩特市| 南昌市| 正安县| 郑州市| 青田县| 栾川县| 隆德县| 隆昌县| 财经| 永康市| 中牟县| 高雄市| 澎湖县| 开远市| 武穴市| 松原市| 资阳市| 温宿县| 亚东县| 新昌县| 平潭县| 远安县| 海丰县| 万源市| 台北县| 屏东市| 恭城| 南郑县| 渭南市| 武冈市| 白朗县| 天长市| 正蓝旗| 上虞市| 邹城市| 开鲁县| 峡江县| 陕西省| 临安市| 政和县|