VisualVM介紹使用

1 ? ?打開VisualVM(這個工具放在JDK安裝目錄的bin目錄下,雙擊jvisualvm.exe即可打開),如下圖所示

?


?VisualVM自身為例,VisualVM本身也是一個java程序,當然也而已用VisualVM來分析

2???概述頁面主要顯示程序的啟動參數和系統信息(如下圖所示)?? ? ? ? ? ?

?

  1. ?PID --?程序啟動后的進程號,在命令行中可以用?jps命令查看
  2. ?主機?--?如果是本機的話顯示,localhost,如果是遠程主機應該是顯示遠程主機的主機名或者IP
  3. ?主類?--?程序入口類(main方法所在的類)
  4. ?參數?-- VisualVm?啟動的時候使用的一些配置文件路徑
  5. ?JVM -- jvm類型
  6. ?Java -- jdk的版本信息
  7. ?Java Home -- JDK安裝目錄
  • JVM參數?-- VisualVm?啟動時候設置的JVM參數
  • ?系統屬性?-- java環境的系統參數

3????監視頁面主要展示?系統資源占用情況(如下圖所示)

?

  1. ??CPU --?展示java程序運行的時候占用的cpu資源 如下圖中橙色的表示程序運行使用的cpu資源百分比,藍色部分表示垃圾回收占用CPU資源百分比
  2. ? 堆?--?這里要說明下堆內存的組成部分,堆是由老年代和新生代組成,其中新生代有由"伊甸園"和"兩個幸存區組成"三部分組成,堆視圖看到的資源占用實際是"老年代"、"伊甸園(Eden)"、"兩個幸存者(Survivor?)"的一個綜合情況。
  3. ??PermGen -- ?Perm?區用來存放java類以及其他虛擬機自己的靜態數據,(常被稱為持久代或者方法區)
  4. ? 類?--?此視圖 主要展示 當前程序加載了多少個類
  5. ? 線程?--?當前程序的線程啟動情況
  • ? 執行垃圾回收?--?手動觸發一次GC?相當于在程序代碼中調用(System.gc()),如果是遠程連接到生產環境中請慎重點擊。
  • ? 堆Dump --?生產當前程序的內存快照hprof文件,對于分析內存溢出問題比較有幫助。(可以查看當前程序內存中的所有對象)

4????線程頁面(主要展示程序中所有的線程運行狀態)

  1. ? 線程dump –?此按鈕主要生產當前程序中所有線程的快照(對分析線程死鎖,比較有幫助)
  2. ? 時間線?–?展示每個線程的實時運行狀態(不同顏色代表不同的狀態)
  3. ? 表?–?按照二維表格的形式展示每個線程不同狀態的時間統計信息
  4. ? 詳細信息?–?用餅圖展示每個線程的運行狀態

5????抽樣器(應該算是線程頁面功能的一個補充)

CPU-> CPU樣例?–?主要展示方法消耗的CPU資源比例和時間

?

?

CPU->線程CPU時間?–?主要展示線程消耗的CPU資源信息

?

內存->?堆柱狀圖?–?展示堆內存中各種對象占用的字節數和總實例數

?

?

內存->PermGen –?展示方法區各種對象消耗的內存情況

?

內存->?每個線程分配—展示不同線程占用內存的情況

?

6????增加VisualGC插件

Java VisualVM默認沒有安裝Visual GC插件,需要手動安裝JDK的安裝目錄的bin目露下雙擊jvisualvm.exe,即可打開Java VisualVM,點擊菜單欄?工具->插件?安裝Visual GC

技術分享

?

?

安裝完成后重啟Java VisualVM,Visual GC界面自動打開,即可看到JVM中堆內存的分代情況

技術分享

?

?

被監控的程序運行一段時間后Visual GC顯示如下

技術分享

?

要看懂上面的圖必須理解Java虛擬機的一些基本概念:

堆(Heap)?:JVM管理的內存叫堆


分代:根據對象的生命周期長短,把堆分為3個代:Young,Old和Permanent,根據不同代的特點采用不同的收集算法,揚長避短也。

  1. Young(年輕代)
    年輕代分三個區。一個Eden區,兩個Survivor區。大部分對象在Eden區中生成。當Eden區滿時,還存活的對象將被復制到Survivor區(兩個中的一個),當這個Survivor區滿時,此區的存活對象將被復制到另外一個Survivor區,當這個Survivor去也滿了的時候,從第一個Survivor區復制過來的并且此時還存活的對象,將被復制“年老區(Tenured)”。需要注意,Survivor的兩個區是對稱的,沒先后關系,所以同一個區中可能同時存在從Eden復制過來對象,和從前一個Survivor復制過來的對象,而復制到年老區的只有從第一個Survivor復制過來的對象。而且,Survivor區總有一個是空的。

  2. Tenured(年老代)
    年老代存放從年輕代存活的對象。一般來說年老代存放的都是生命期較長的對象。

  3. Perm(持久代)
    用于存放靜態文件,如今Java類、方法等。持久代對垃圾回收沒有顯著影響,但是有些應用可能動態生成或者調用一些class,例如Hibernate等,在這種時候需要設置一個比較大的持久代空間來存放這些運行過程中新增的類。持久代大小通過-XX:MaxPermSize=進行設置。

?

GC的基本概念

gc分為full gc 跟 minor gc,當每一塊區滿的時候都會引發gc。

  1. Scavenge GC
    一般情況下,當新對象生成,并且在Eden申請空間失敗時,就觸發了Scavenge GC,堆Eden區域進行GC,清除非存活對象,并且把尚且存活的對象移動到Survivor區。然后整理Survivor的兩個區。

  2. Full GC
    對整個堆進行整理,包括Young、Tenured和Perm。Full GC比Scavenge GC要慢,因此應該盡可能減少Full GC。有如下原因可能導致Full GC:

  • 上一次GC之后Heap的各域分配策略動態變化

  • System.gc()被顯示調用

  • Perm域被寫滿

  • Tenured被寫滿

?

內存溢出??out of memory,是指程序在申請內存時,沒有足夠的內存空間供其使用,出現out of memory;比如申請了一個integer,但給它存了long才能存下的數,那就是內存溢出。

內存泄露? memory leak,是指程序在申請內存后,無法釋放已申請的內存空間,一次內存泄露危害可以忽略,但內存泄露堆積后果很嚴重,無論多少內存,遲早會被占光。其實說白了就是該內存空間使用完畢之后未回收。

?

轉載于:https://www.cnblogs.com/lizhen-home/p/7727536.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370852.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370852.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370852.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c語言奇葩錯誤,6個奇葩的(hello,world)C語言版(轉)

//下面的所有程序都可以在GCC下編譯通過,只有最后一個需要動用C的編譯器用才能編譯通過。//程序功能輸出 Hello,world!01.c#define _________ }#define ________ putchar#define _______ main#define _(a) ________(a);#define ______ _______(){#define __ _____…

Java功能的適用性

Java語言和標準庫功能強大,但功能強大, 責任重大 。 一方面看到很多用戶代碼濫用或濫用稀有的Java功能,另一方面卻完全忘記了大多數基本功能之后,我決定撰寫此摘要。 這不是每個Java開發人員都應該探索,了解和使用的要…

臺達b3伺服modbus通訊_【數控系統】臺達伺服壓機控制靈活 精準壓合滿足各種工序需求...

引言壓機是一種利用壓力改變工件形狀的機械設備。隨著制造業少量多樣與客制化的日趨發展,壓機的的優勢逐漸顯現,在汽車、五金與電子制造等產業中的應用不斷增多。傳統壓機在使用操作上耗費人力并需要諸多壓機元件才能完整運作,維修成本高&…

Binary Agents(二進制值轉換字符串)

題目&#xff1a; 傳入二進制字符串&#xff0c;翻譯成英語句子并返回。 二進制字符串是以空格分隔的。 代碼&#xff1a; 1 function binaryAgent(str) {2 var arr str.split( );3 for (var i 0; i < arr.length; i) {4 arr.splice(i,1,String.fromCharCode(BtoD…

我對CSS選擇器的認識

我對CSS選擇器的認識 一、簡述   CSS選擇器是對HTML元素進行選擇的篩選條件&#xff0c;大概可以分為兩類&#xff1a; 特征選擇器——根據元素自身所具有的某種特征進行篩選&#xff0c;比如名稱、ID、屬性等&#xff1b;關系選擇器——根據元素與其他元素的關系進行篩選&…

【USACO2006 Mar】滑雪纜車 skilift

【USACO2006 Mar】 滑雪纜車 skilift Time Limit 1000 msMemory Limit 131072 KBytes Description 科羅拉多州的羅恩打算為奶牛建造一個滑雪場&#xff0c;為此要在山上規劃一條纜車線路。 整座山可以用一條折線來描述&#xff0c;該折線有N個拐點&#xff0c;起點是1&#xff…

yolov4Linux,基于Darknet的YOLOv4目標檢測

目錄一、Windows環境下的YOLOv4目標檢測1、環境配置環境準備&#xff1a;Win10、CUDA10.1、cuDNN7.65、Visual Studio 2019、OpenCV 3.4(1)Visual Studio2019企業版安裝(3)下載并安裝CUDA10.1&#xff0c;下載安裝cuDNN7.65對于cudnn直接將其解開壓縮包&#xff0c;然后需要將b…

二元置信橢圓r語言_醫學統計與R語言:圓形樹狀圖(circular dendrogram)

微信公眾號&#xff1a;醫學統計與R語言如果你覺得對你有幫助&#xff0c;歡迎轉發輸入1&#xff1a; "ggraph")結果1&#xff1a; name 輸入2&#xff1a; <- graph_from_data_frame(myedges1, verticesmyvertices,directed T)ggraph(mygraph, layout dend…

Java:檢查器框架

我在JavaOne 2012上 了解的有趣的工具之一是Checker Framework 。 Checker Framework的網頁之一 指出 &#xff0c;Checker Framework“增強了Java的類型系統&#xff0c;使其更強大&#xff0c;更有用”&#xff0c;從而使軟件開發人員“能夠檢測并防止Java程序中的錯誤”。 查…

南岸焊接機器人廠_造船三部高效焊接工藝技術年鑒

為了提升公司高效焊自動化率&#xff0c;實現降本增效目標&#xff0c;造船事業三部積極響應公司領導號召&#xff0c;充分挖掘自身資源&#xff0c;2020年&#xff0c;在高效焊接技術、設備開發研究等方面&#xff0c;不斷創新、敢于突破&#xff0c;獲取了多項焊接新技術、新…

軟工Hello World!團隊第二周博客匯總

2017.10.20-2017.10.26 Scrum會議&#xff1a; 第一天&#xff1a;http://www.cnblogs.com/liusx0303/p/7704482.html 第二天&#xff1a;http://www.cnblogs.com/Mingezi/p/7709472.html 第三天&#xff1a;http://www.cnblogs.com/lynlyn/p/7717275.html 第四天&#xff1a;h…

什么是css sprites,如何使用?

css sprites&#xff1a;精靈圖&#xff08;雪碧圖&#xff09;&#xff1a;把一堆小圖片整合在一張大圖上&#xff0c;通過背景圖片相關設置&#xff08;背景圖片、背景圖是否重復、背景圖定位&#xff09;&#xff0c;顯示圖片&#xff0c;減輕服務器對圖片的請求數量 優點&…

線性回歸csv數據集_測試數據科學家線性回歸的30個問題

你的目標是數據科學家嗎&#xff1f;那你對線性回歸了解有多深入呢&#xff0c;下面的30道題&#xff0c;可以幫助你或者測試別人是否真的達到的數據科學家的水平&#xff0c;關注回復&#xff0c;答案在評論區&#xff1a;1)是非題&#xff1a;線性回歸是一種受監督的機器學習…

linux調試crontab,linux - crontab 的調試,啟動thin服務器

linux - crontab 的調試&#xff0c;啟動thin服務器2018-11-18 17:10訪問量: 1059分類&#xff1a;技術參考&#xff1a;https://askubuntu.com/questions/56683/where-is-the-cron-crontab-log日志默認位置在 /var/log/syslog 中。 grep CRON 。 如果沒有安裝MTA的話(例如 mai…

番石榴前提條件課

編寫過很多Java文章的人可能都編寫了以條件為開頭的方法&#xff0c;這些條件可以在繼續進行該方法的其余實現之前&#xff0c;先驗證提供的參數或要操作的對象的狀態。 這些會增加方法的冗長性&#xff0c;有時&#xff0c;尤其是在有多個檢查的情況下&#xff0c;幾乎會淹沒該…

dw空心圓項目符號_如何懂建筑施工圖?搞懂這些符號解析,耐下性子研究不會學不會...

施工圖紙一個建筑方向&#xff0c;是房屋建筑的依據&#xff0c;更是一種工程語言&#xff0c;它能夠明確的規定出我們建造出怎樣的建筑&#xff0c;看懂它是入行基礎。當然建筑圖包含的因素比較多&#xff0c;有具體的建筑符號&#xff0c;尺寸、做法以及技術要求都在里面&…

子域名查詢技術

子域名查詢是滲透測試中的重要一環&#xff0c;收集盡可能多的子域名就是盡可能地擴大我們的攻擊面和了解網絡內部結構。 子域名保存位置利用點具體用法DNS服務器區域傳送漏洞dig ns.dnsdomain.com target.com axfr主站鏈接網站爬蟲百度site:target.com被動解析字典枚舉解析fie…

Dashboard集群

#Dashboard集群 openstack pike 部署 目錄匯總 http://www.cnblogs.com/elvi/p/7613861.html ##8.Dashboard集群#####在controller1安裝配置#安裝 yum install openstack-dashboard -y#配置 cp /etc/openstack-dashboard/local_settings{,.bak} #egrep -v #|^$ /etc/openstack-…

canvas學習和濾鏡實現

最近學習了 HTML5 中的重頭戲--canvas。利用 canvas&#xff0c;前端人員可以很輕松地、進行圖像處理。其 API 繁多&#xff0c;這次主要學習常用的 API&#xff0c;并且完成以下兩個代碼&#xff1a;實現去色濾鏡實現負色(反色)濾鏡 歡迎入群&#xff1a;857989948 。IT 技術深…

python 數據分析庫_五個 Python 常用數據分析庫

前言 Python 是常用是數據分析工具&#xff0c;常用的數據分析庫有很多&#xff0c;下面主要介紹如下五個分析庫&#xff1a;NumPy、Pandas、SciPy、StatsModels、Matplotlib。 NumPy 是一個非常常用的數據分析庫&#xff0c;更準確點說是一個數學計算庫&#xff0c;包括下面的…