国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

沒有監控過JVM內存的職場生涯,是不完美的

云計算 虛擬化
這篇文章就基于一款JDK自帶的工具(VisualVM),然后編寫內存溢出的案例,帶大家體驗一下JVM分析的入門。文中涉及到多個知識點的融合與實戰經驗分享,讀者可留意一下。

[[393678]]

本文轉載自微信公眾號「程序新視界」,作者丑胖俠二師兄。轉載本文請聯系程序新視界公眾號。

前言

如果你從事Java開發多年,還沒用過JVM分析工具,還沒嘗試著通過對JVM的dump日志來進行故障定位和性能調優,那么可以說是你職場生涯中的一大遺憾,也是一種能力的缺失。

這篇文章就基于一款JDK自帶的工具(VisualVM),然后編寫內存溢出的案例,帶大家體驗一下JVM分析的入門。文中涉及到多個知識點的融合與實戰經驗分享,讀者可留意一下。

VisualVM簡介

VisualVM是Netbeans的profile子項目,在JDK6.0 update 7 中自帶,能夠監控線程,內存情況,查看方法的CPU時間和內存中的對象,已被GC的對象,反向查看分配的堆棧(如100個String對象分別由哪幾個對象分配出來的)。

如果已經正確配置classpath路徑,VisualVM的啟動非常簡單,只需在命令行輸入jvisualvm即可啟動圖形化界面。VisualVM不僅支持本機監控,還支持遠程監控。

遠程監控配置稍微復雜一些,這里以本地監控為示例進行演示。至于生產環境,可選擇遠程監控,也可配合jmap先生成dump文件,然后下載dump文件進行分析。

VisualVM功能界面

啟動VisualVM之后,先來看一下有助于JVM分析的幾項功能。這里先以本地啟動的Idea為例來進行展示。

概述

進入VisualVM之后,點擊左邊的對應進程,首先展示的是【概述】內容:

概述中顯示了JVM、Java版本、dump批次等信息,在實戰中這里的信息可用來進行信息核對。特別是JVM參數和系統屬性項的核對。

曾遇到一個場景,就是通過啟動Java程序時JVM參數的位置寫錯了,導致JVM參數并不生效。

比如如下指令,由于JVM的參數寫在了最后,會導致參數設置無效。

  1. java -jar app.jar -Xms256m -Xmx512m 

而正確的寫法應該是如下:

  1. java -Xms256m -Xmx512m  -jar app.jar 

上面這種情況,通過該工具可以輕易的看出JVM參數項里面并沒有指定的參數值。

監視

監視界面是用的比較多的一個界面,通過該界面可以查看CPU使用情況、堆和Metaspace的使用情況、線程的使用情況、類的加載情況等。

通過對堆和Metaspace的使用情況分析,可以看到對應內存空間的使用和增長情況,可進行合理調整和規劃。

點擊右上角的“堆 dump”,會基于點擊的時間節點生成dump文件。

概要部分會顯示生成dump文件的時間節點和存儲路徑。我們用來分析內存主要是在此頁面中的“類”菜單內。

進入可查看在堆中不同實例占用的內存大小。雙擊類名,即可進入查看“實例數”,也就是具體類的實例詳情。

而我們在內存分析時最重要的其實就是“類”的數量。在了解了上述的基本操作之后,我們就用一個實例來模擬分析一下內存溢出的場景吧。

內存溢出場景構建

先寫一段代碼,用來模擬內存溢出,也就是創建一個Map,然后向其中不斷的新增對象。同時在程序處理的過程中讓線程睡眠或死循環來方便通過VisualVM進行查看。

測試代碼如下:

  1. public class MemoryLeakTest { 
  2.  
  3.     /** 
  4.      * 聲明緩存對象 
  5.      */ 
  6.     private static final Map<String, TestMemory> CACHE_MAP = new HashMap<>(); 
  7.  
  8.     public static void main(String[] args) { 
  9.         try { 
  10.             //給打開visualVm時間 
  11.             Thread.sleep(10000); 
  12.         } catch (InterruptedException e) { 
  13.             e.printStackTrace(); 
  14.         } 
  15.         //循環添加對象到緩存 
  16.         for (int i = 0; i < 1000000; i++) { 
  17.             TestMemory t = new TestMemory(); 
  18.             CACHE_MAP.put("key" + i, t); 
  19.         } 
  20.         System.out.println("-------1------"); 
  21.         //為dump出堆提供時間 
  22.         try { 
  23.             //給打開visualVm時間 
  24.             Thread.sleep(10000); 
  25.         } catch (InterruptedException e) { 
  26.             e.printStackTrace(); 
  27.         } 
  28.  
  29.         for(int i=0; i<1000000;i++){ 
  30.             TestMemory t = new TestMemory(); 
  31.             CACHE_MAP.put("key"+i,t); 
  32.         } 
  33.     } 

TestMemory類代表生成中的業務類。

  1. public class TestMemory { 

為了讓程序更快的達到內存的閾值,我們啟動時可限制JVM的大小,這里設置為:

  1. -Xms128m -Xmx128m 

另外,為了分析堆的內存結構中每個區域(新生代、老年代)的內存使用情況,可在VisualVM的“工具”、“插件”中安裝Visual GC插件。該插件的使用后續會看到效果。

一切準備妥當,下面來進行驗證。

內存溢出分析

下面我們就來啟動程序,啟動VisualVM來進行內存溢出的分析。

當程序執行的過程中,我們會發現“堆”內存會出現一個快速增加的曲線。

這個過程中Metaspace也在隨之增長。

打開Visual GC界面,我們會看到面試中被問過很多遍的堆內存結構:

通過這張圖,可以直觀的看到堆內存中的老年代、新生代、Metaspace空間(JDK8),還有新生代中的Eden、S0(Survivor From)、S1(Survivor To),而且它們的分配比例也有一個比較直觀的展示。通過這種形式,是不是可以更直觀的學習堆內存結構呢?

這里Eden已經被填滿、S0和S1為空,老年代也幾乎被填滿(因為垃圾收集無法清除持有引用的對象)。

最重要的是你會發現針對老年代在20分鐘內進行了3850次垃圾回收。也就是說已經觸發了頻繁的Full GC操作,而且內存并沒有被釋放掉。在生產系統中,當你看到系統在頻繁的進行Full GC操作,那是JVM在釋放一個很恐怖的信號了。

上面說了一些表象的內容,現在真正開進行內存分析了。回到上面提到的“監視”、“堆dump”、“類”中,可以看到下圖:

可以看到,堆中存在著100萬個TestMemory對象。當你看到堆中有類似的大量的對象存在,你應該意識到此處可能有內存泄露。也就是大量的對象被創建,而沒有被“順利”回收。我們這里沒被回收的原因是對象被放在了靜態變量里面了。

上面已經提到,你還可以進一步雙擊對象名稱,去查看對象的詳細信息。

通過上面步驟,基本上可以定位到哪些對象的處理出現了問題,此時再回到代碼中針對相應的代碼進行排查,便可快速定位內存溢出的問題所在。其中我們需要特別留意上述過程中VisualVM為我們提供的那些報警信號和數據呈現。

小結

本文我們是在講VisualVM的使用,也是在講線上JVM的排查,也是在講JVM的內存結構,還是在講如何去構造一個內存溢出(bug)的場景。但講什么并不重要,關鍵是看,通過這篇文章,你重溫了什么,學到了什么,又收獲了什么。

 

責任編輯:武曉燕 來源: 程序新視界
相關推薦

2009-09-11 09:36:53

李開復

2022-03-29 08:55:18

存儲引擎核心

2022-03-02 09:49:14

Rust編程語言

2010-06-18 10:51:27

NetBeans 6.CSSEclipse

2012-12-21 15:16:27

新浪微博小米

2018-10-22 14:00:12

數據數據插補數據科學

2019-05-15 11:38:22

GoogleGo編程語言

2019-04-17 13:34:30

Galaxy Fold三星折疊屏

2010-08-30 10:53:10

職場

2010-09-26 14:55:46

JVM內存監控

2020-10-26 09:53:44

Dropbox攻擊網絡安全

2020-10-23 10:36:08

Dropbox

2010-08-05 16:26:09

職場升職計

2012-03-02 14:20:46

JavaJVM

2022-04-13 15:04:38

模型理論方案

2017-09-11 10:09:59

刪庫DBA淘汰

2014-06-17 09:13:34

下一代防火墻NGFW

2014-03-25 09:15:20

VS2012GitHub

2017-03-10 16:32:44

Apache Spar大數據工具

2018-12-11 15:00:37

點贊
收藏

51CTO技術棧公眾號

精品伊人久久大线蕉色首页| 国产精品福利视频| 精品欧美不卡一区二区在线观看 | 中文字幕日本在线| 欧美激情一区二区三区四区| 国产精品一区二区三区四区五区| 亚洲精品一区国产| 日韩三级视频中文字幕| 两个人hd高清在线观看| 99在线热播精品免费| 久久精品aaaaaa毛片| 国产伦精品一区二区三区视频| 亚洲午夜精品久久久久久性色 | 欧美一级网址| 欧美群妇大交群的观看方式| 1区不卡电影| 91在线小视频| 熟女视频一区二区三区| 激情久久久久| 国产精品丝袜久久久久久不卡| 成人短视频软件网站大全app| 欧美tk—视频vk| 日本不卡免费播放| 一区二区三区.www| 午夜激情福利在线| 不卡高清视频专区| 国产91视频一区| 日本亚洲最大的色成网站www| 国产精品乱码视频| 欧美一区高清| 国产精品久久久久99| 国产精品115| 欧美黄色成人网| 国产色99精品9i| 深夜成人在线观看| 国精产品一区一区三区四川| 精品久久久久一区二区国产| 麻豆传媒视频在线观看免费| 成人淫片在线看| 国产视频一区二区在线播放| 在线丨暗呦小u女国产精品| 一区二区三区四区日本视频| 亚洲欧洲中文天堂| 韩国精品视频在线观看| 精品国产欧美一区二区三区成人| 国产成人免费精品| 色偷偷噜噜噜亚洲男人| 五月天色综合| 久久久久久久一区二区| 久草精品视频| 国产精品精品一区二区三区午夜版| 啪啪国产精品| 国产精品电影久久久久电影网| 欧美偷拍综合| 亚洲最大激情中文字幕| 亚洲一区二区三区高清不卡| 奇米影视首页 狠狠色丁香婷婷久久综合 | 51漫画成人app入口| 日韩精品在线播放| 成人激情综合| 欧美激情国产精品| 国产精品欧美日韩一区| 91精品久久久久久久久久另类| 午夜激情久久| 欧美精品二区三区四区免费看视频| 蜜臀精品久久久久久蜜臀| 亚洲成人动漫在线| 欧美激情一区二区| 在线国产网址| 日韩欧美一卡二卡| 久久人体av| 国产精品久久久久久网站| 99国产精品99久久久久久粉嫩| 亚洲一区二区三区免费看| a美女胸又www黄视频久久| 色噜噜狠狠一区二区| 欧美日韩亚洲视频一区| 丁香花在线影院| 欧美激情一区二区三区高清视频 | 亚洲精品一区二区在线| 超碰地址久久| 2022国产精品| 国产在线精品一区二区夜色| 精品久久久久久中文字幕2017| 亚洲精品免费视频| 日本福利在线| 色综合久久88色综合天天看泰| 天天超碰亚洲| 午夜啪啪福利视频| 亚洲综合另类小说| 国产资源在线观看入口av| 97国产真实伦对白精彩视频8| 一区二区三区四区五区在线 | yellow视频在线观看一区二区| 91tv精品福利国产在线观看| 久久97精品久久久久久久不卡| av资源网在线播放| 久久久久久成人| 久久九九全国免费| 男人和女人啪啪网站| 国产一区二区在线影院| 国产成人永久免费视频| 久久久久久久网| 一本岛在线视频| 1024精品合集| 免费看一级大黄情大片| 有坂深雪av一区二区精品| 国产成人免费| 99久热re在线精品视频| 91网站黄www| 国产综合色激情| 国产在线一区二| aa级大片欧美| 蝌蚪视频在线播放| 日韩欧美在线综合网| 大菠萝精品导航| 欧美亚洲午夜视频在线观看| 欧美中文一区二区| 全黄性性激高免费视频| 欧美性xxxx| 另类图片第一页| 5252色成人免费视频| 久久人人97超碰com| 婷婷综合影院| 欧美一区二区三区人| av有声小说一区二区三区| 亚洲高清一区二| 国产精品成人**免费视频| 久久婷婷国产综合尤物精品| 欧美蜜桃一区二区三区| 日韩专区欧美专区| 黄色一级片在线观看| 日韩一区国产在线观看| 久久这里有精品视频| 亚洲精一区二区三区| 五月天久久狠狠| 亚洲国产一二三| 亚洲国产91视频| 日韩欧美在线电影| 天天综合网天天综合色| 成人在线视频你懂的| 丰满人妻一区二区三区53号 | 午夜激情av在线| 亚洲欧美www| 91久久精品国产91久久性色| 最新精品国产| 自拍偷拍21p| 日韩在线欧美在线| 国产一区二区0| 波多野结衣精品| 欧美极品一区二区| 欧美一区二区三区四区高清| 欧美日韩国产在线一区| 黄页网站在线播放| 热草久综合在线| 一区在线观看免费| 四虎884aa成人精品最新| 手机在线免费观看毛片| 麻豆国产精品va在线观看不卡| 国产成人精品亚洲日本在线桃色| 免费亚洲电影在线| 精品三级久久久久久久电影聊斋| 国产成人avxxxxx在线看| 中文字幕中文字幕一区二区| 亚洲电影一区| 中文字幕一区二区三区四区在线视频| 精品国模在线视频| 91丨porny丨国产入口| 亚洲欧美久久精品| 50路60路老熟妇啪啪| 高清视频欧美一级| 亚洲麻豆国产自偷在线| 欧美三级伦理在线| h视频在线观看免费| 日本午夜精品一区二区| 日韩精品中文字幕久久臀| 国产aⅴ精品一区二区三区色成熟| 亚洲精品粉嫩美女一区| 国产成人久久777777| 97精品国产97久久久久久春色| 有码一区二区三区| 欧美国产三区| av网站在线免费| 国产av熟女一区二区三区| 欧美诱惑福利视频| 色av成人天堂桃色av| 国产精品资源| 影音先锋中文字幕一区| 一区二区三区在线观看动漫 | 麻豆91在线播放| 麻豆国产精品视频| 欧美激情一区三区| 日韩欧美aⅴ综合网站发布| 欧美性xxxxhd| 欧美日韩国产va另类| 国产亚洲情侣一区二区无| 97人摸人人澡人人人超一碰| 欧美高清xxxxxkkkkk| 国产高清不卡| 亚洲高清免费|