安装Java Visualvm监控堆内存和参数说明
安裝Java Visualvm監(jiān)控堆內(nèi)存和參數(shù)說明
1.概述
這篇文章介紹使用Java Visualvm工具監(jiān)控堆內(nèi)存VisualGC插件的安裝以及監(jiān)控堆內(nèi)存參數(shù)說明。
摘要
- VisualGC插件安裝
- VisualGC監(jiān)控Jmeter堆內(nèi)存案例
- VisualGC監(jiān)控界面參數(shù)說明
2.安裝VisualGC插件
2.1.打開Java Visualvm
本地安裝java后,使用cmd命令打開Java Visualvm工具。
jvisualvm2.2.安裝VisualGC插件
Java Visualvm默認安裝插件網(wǎng)站已經(jīng)關(guān)閉,將插件移到了gitHub上,下面我們通過修改下載地址安裝插件。
1.打開插件下載官網(wǎng)
插件官網(wǎng):https://visualvm.github.io/plugins.html
2.復(fù)制插件地址
點擊Plugins進入插件頁面,點擊Plugins Centers進入插件中心
根據(jù)自己本地安裝java的版本選擇對應(yīng)版本的插件,例如我的是java8,復(fù)制JDK8對應(yīng)插件地址。
3.修改插件下載地址
點擊Java Visualvm的 工具——>插件,在設(shè)置中點擊編輯粘貼我們復(fù)制的插件地址
4.安裝VisualGC插件
安裝VisualG插件后,點擊VisualVM就可以看到插件監(jiān)控效果。
VisualVM監(jiān)控的就是這個程序自身的堆內(nèi)存使用情況。
3.VisualGC監(jiān)控Jmeter堆內(nèi)存案例
- Visualvm工具能夠自動發(fā)現(xiàn)本機上所有java程序,不需要手動添加連接地址。例如我們監(jiān)控Jmeter程序堆內(nèi)存使用情況,首先啟動Jmeter程序。
- 啟動Jmeter程序后,在Visualvm會自動發(fā)現(xiàn)Jmeter程序,并顯示在窗口中。
- 雙擊Jmeter就可以打開監(jiān)控界面
4.VisualGC監(jiān)控界面參數(shù)說明
下面重點對VisualGC監(jiān)控界面各個區(qū)域的參數(shù)做一個介紹,在看到這些參數(shù)時我們知道了他代表的含義就可以對被監(jiān)控程序的堆內(nèi)存進行分析
下面圖根據(jù)布局可分為三個區(qū)域,分別是Spaces、Graphs和Histogram,下面就逐個區(qū)域介紹。
1.Spaces區(qū)域
該區(qū)域通過柱狀圖方式展示堆內(nèi)存運行情況
- Metaspace:方法區(qū),如果JDK1.8之前的版本,就是Perm,JDK7和之前的版本都是以永久代- (PermGen)來實現(xiàn)方法區(qū)的,JDK8之后改用元空間來實現(xiàn)(MetaSpace)。
- Old:老年代
- Eden: 新生代Eden區(qū)
- S0和S1:新生代的兩個 Survivor 區(qū)
2.Graphs區(qū)域
該區(qū)域包含了編譯、類加載、GC執(zhí)行統(tǒng)計、堆內(nèi)存使用情況等幾個方面數(shù)據(jù)展示
-
Compile Time:編譯情況
5794 compoles - 11.682s 表示編譯總數(shù)為5794 ,編譯總耗時為11.682s。
一個脈沖表示一次JIT編譯,脈沖越寬表示編譯時間越長。 -
Class Loader Time:類加載情況
9480 loaded,0 unloaded - 5.561s表示已加載的數(shù)量為9480 ,卸載的數(shù)量為0,耗時為5.561s。 -
GC Time:總的(包含新生代和老年代)gc情況記錄
16 collections,140.800ms Last Cause:G1 Evacuation Pause表示一共經(jīng)歷了16次gc(包含Minor GC和Full GC),總共耗時140.800。最后一次GC原因G1 Evacuation Pause -
Eden Space:新生代Eden區(qū)內(nèi)存使用情況
(1.000G,44.000M): 27.000M,14 collections,75.425ms表示Eden區(qū)的最大容量為1G,當前初始值容量為44.000M,當前已使用27.000M,從開始監(jiān)控到現(xiàn)在在該內(nèi)存區(qū)域一共發(fā)生了14次gc(Minor GC),gc總耗時為75.425ms。
Eden區(qū)的最大容量是我們設(shè)置的最大堆內(nèi)存,程序運行時如果超過該值就會發(fā)生內(nèi)存移除錯誤,當前初始值容量是根據(jù)當前使用堆內(nèi)存的情況動態(tài)調(diào)整,如果使用堆內(nèi)存呈上升趨勢,那么初始值也會上升,知道最大值。反之下降。 -
Survivor 0和Survivor 1:新生代的兩個Survivor區(qū)內(nèi)存使用情況
(1.000G,1.000M):1.000M表示該Survivor區(qū)的最大容量為1G(默認為Eden區(qū)的1/8),當前已用1.000M。 -
Old Gen:老年代內(nèi)存使用情況
(1.000M,83.000M):57.172M,2 collections,65.375ms表示老年區(qū)的最大容量為1G,當前容量為83.000M,當前已用57.172M,從開始監(jiān)控到現(xiàn)在在該內(nèi)存區(qū)域一共發(fā)生了2次gc(Full GC),gc總耗時為65.375ms,換算下可以看出單次Full GC要比Minor GC耗時長很多。 -
Metaspace:方法區(qū)內(nèi)存使用情況
(1.045G,54.613M):53.482M表示方法區(qū)最大容量為1.045G,當前容量為54.613M,當前使用量為53.482M。
3.Histogram區(qū)域
Histogram區(qū)域主要展示Survivor區(qū)內(nèi)存使用情況
-
Tenuring Threshold:我們知道Survivor區(qū)中的對象有一套晉升機制,就是其中的每個對象都有一個年齡標記,每當對象在一次Minor GC中存活下來,其年齡就會+1,當對象的年齡大于一個閾值時,就會進入老年代,這個閾值就是Tenuring Threshold,要注意這個值不是固定不變的,一般情況下Tenuring Threshold會與Max Tenuring Threshold大小保持一致,可如果某個時刻Survivor區(qū)中相同年齡的所有對象的內(nèi)存總等于Survivor空間的一半,那Tenuring Threshold就會等于該年齡,同時大于或等于該年齡的所有對象將進入老年代。
-
Max Tenuring Threshold:表示新生代中對象的最大年齡值,這個值在JDK1.8中默認為6,在JDK1.7及之前的版本中默認為15,可以通過參數(shù)-XX:MaxTenuringThreshold來指定。
-
Desired Survivor Size:Survivor空間大小驗證閾值(默認是survivor空間的一半),用于給Tenuring Threshold判斷對象是否提前進入老年代。
-
Current Survivor Size:當前Survivor空間大小,單位為字節(jié)(Byte,B)
-
Histogram柱狀圖:表示Survivor中不同年齡段對象分布。
總結(jié)
以上是生活随笔為你收集整理的安装Java Visualvm监控堆内存和参数说明的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的世界服务器如何修复报错,我的世界18
- 下一篇: 互联网早报:腾讯内测游戏社交 App“N