1. 程式人生 > >部落格遷移至:https://github.com/aalansehaiyang

部落格遷移至:https://github.com/aalansehaiyang

MAT 全稱 Eclipse Memory Analysis Tools 是一個分析 Java堆資料的專業工具,可以計算出記憶體中物件的例項數量、佔用空間大小、引用關係等,看看是誰阻止了垃圾收集器的回收工作,從而定位記憶體洩漏的原因。

什麼時候會用到MAT?

a) OutOfMemoryError的時候,觸發full gc,但空間卻回收不了,引發記憶體洩露

b)java伺服器系統異常,比如load飆高,io異常,或者執行緒死鎖等,都可能通過分析堆中的記憶體物件來定位原因

如何安裝:

分析檔案生成方式:

a)自動生成,jvm啟動引數裡新增下面配置,當發生OutOfMemoryError時,虛擬機器會自動dump記憶體快照

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$LOG_DIR/java.hprof"

b)手動生成,通過執行jdk自帶命令

jmap -dump:format=b,file=heap.bin  <pid>

接下就可以用 MAT開啟轉換後的 hprof檔案

開啟後的首頁,裡面是一些堆的基本概要資訊,比如空間大小、類的數量、物件例項數量、類載入器等等

Atcion裡面提供了多種分析維度:

  • Histogram可以列出記憶體中的物件,物件的個數以及大小。
  • Dominator Tree可以列出那個執行緒,以及執行緒下面的那些物件佔用的空間。
  • Top consumers通過圖形列出最大的object。
  • Leak Suspects通過MA自動分析洩漏的原因。

Histogram 

它按類名將所有的例項物件列出來,點選表頭(Class Name)可以排序,第一行輸入正則表示式可以過濾篩選 ;

Shallow Heap :一個物件記憶體的消耗大小,不包含對其他物件的引用;
Retained Heap :是shallow Heap的總和,也就是該物件被GC之後所能回收的記憶體大小;


在某一項上右鍵開啟選單選擇list objects :

with incoming references將列出哪些類引入該類;

with outgoing references 列出該類引用了哪些類



從工具欄中點開 Heap Dump Overview檢視,可以看到一個全域性的記憶體佔用資訊

Dominator Tree

可以列出記憶體中存活的大物件列表,優點是有Percentage欄位,可以看各種情況的百分比。

分組工具可以根據自己的需求分組查詢,預設根據class分組,本文中是根據 package分組,發現存在大量的SSLSocketImpl類無法回收,這樣會導致所有直接或間接引用到SSLSocketImpl的類都無法回收,圖中可以看出雖然Shallow Heap大小隻有1.6M,但Retained Heap大小卻有378M。



快速找出某個例項沒被釋放的原因,可以右健Path to GC Roots-->exclude all phantom/weak/soft etc. references

它展示了物件間的引用關係,比如SSLSocketImpl @0xa124b208被PushNotificationManager 例項中的socket屬性所引用。

Top consumers


多種維度(包括 類大小、類載入器、包名)展示佔用記憶體比較多的物件的分佈,從而定位記憶體資源主要耗費在哪些地方!

Leak Suspects


MAT外掛會給出一份可疑的分析報告,非常方便,我們只需結合原始碼稍加分析到底哪個Problem才是引發問題真正原因所在。

參考資料:

http://www.eclipse.org/mat/about/screenshots.php

https://www.yourkit.com/docs/java/help/garbage_collection.jsp

http://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-ma/index.html

http://help.eclipse.org/luna/index.jsp?topic=/org.eclipse.mat.ui.help/welcome.html


相關推薦

部落遷移https://github.com/aalansehaiyang

MAT 全稱 Eclipse Memory Analysis Tools 是一個分析 Java堆資料的專業工具,可以計算出記憶體中物件的例項數量、佔用空間大小、引用關係等,看看是誰阻止了垃圾收集器的回收工作,從而定位記憶體洩漏的原因。什麼時候會用到MAT?a) OutOfMe

GitHub Pages部落遷移CSDN blog

  不知是過了折騰的年紀,還是現在千頭萬緒的、太忙了,現在再也沒有當初的勇氣折騰許許多多的東西了,漸漸地告訴自己“適應”、“將就”,於是也就有了此舉——將博文從GitHub Pages遷移到CSDN來。   可笑當年還想一篇博文多處發表多處維護,不知當時的無畏

Golang的配置資訊處理框架Viper【專案地址https://github.com/spf13/viper】

轉自:http://blog.51cto.com/13599072/2072753 Viper 專案地址:https://github.com/spf13/viper 本文翻譯自該專案裡README.md檔案中的內容 有很多Go語言專案用到了Viper框架,比如: Hugo

GitHub地址https://github.com/zaiyunduan123

金九銀十,為方便小夥伴們更好的準備面試,拿到滿意offer,小慕特地整理了一批的乾貨,供大家學習:必讀:職場面試篇Java3y,個人主頁xpbob,個人主頁查缺補漏篇_Jimin_,個人主頁Aidodoo,個人主頁格子anjiula,個人主頁昌鬆,個人主頁視訊課程推薦這門課程將結合大量圖示及程式碼演示,讓

【Keep Learning】學習Spark、CarbonData 、Alluxio等,且為其Contributor,Githubhttps://github.com/xubo245。歡迎微信聯絡601450868!

學習Spark、CarbonData 、Alluxio等,且為其Contributor,Github為:https://github.com/xubo245。歡迎微信聯絡601450868!...

Keep Learning(學習Spark、CarbonData 、Alluxio等,且為其Contributor,Githubhttps://github.com/xubo245。歡迎微信聯絡601450868!)

學習Spark、CarbonData 、Alluxio等,且為其Contributor,Github為:https://github.com/xubo245。歡迎微信聯絡601450868!...

【game3108的專欄】githubhttps://github.com/game3108 jianshu:http://www.jianshu.com/users/2750fa319a10/latest_articles

github:https://github.com/game3108 jianshu:http://www.jianshu.com/users/2750fa319a10/latest_articles...

如何走上更高平臺分享傳遞乾貨知識(開通個人Github面向開源及私有軟體專案的託管平臺https://github.com/zlslch/)(圖文詳解)(博主推薦)

歡迎您的加入! 微信公眾號平臺: 大資料躺過的坑 微信公眾號平臺: 人工智慧躺過的坑 大資料和人工智慧躺過的坑(總群): 161156071 更多QQ技術分群,詳情請見:http://www.cnblogs.com/zls

部落遷移到 http://www.blog4app.com/

1、ContentProvider的使用        NotePad.java定義了資料庫中唯一的Notes表的若干欄位及其屬性。Notes表實現了BaseColumns介面,即擁有了_id和_count的屬性。資料庫表的Uri的命名規則一般是:content://*

部落https://chengyanzhao.github.io,CSDN不再更新。

寫在前面 1表單型別 模板驅動型表單:使用模板表單內建指令、內建校驗的方式來構建表單。也就是將程式碼、邏輯放在模版(HTML)裡。 響應式表單:將功能性的內容移到程式碼裡。 動態表單:用程式碼生成表單DOM。 2模板驅動表單 2.1表單指

部落停止維護和更新,已轉移https://github.com/ilvseyinfu/blog

14 + 16 單選+不定項 感覺選擇考的還是比較基礎的,cookie / 本地儲存 / 網路協議 / CSS3新特性 / HTML5新元素 剩下的記不起來了,對了還考了Vue和react 程式設計題2道,第二道沒時間看了,剛開始還覺得時間很充裕,然後就卡到第一道程式設計

部落遷移http://www.laokboke.com

當我正在家裡寫部落格為上傳圖片速度慢而抓狂的時候,大洋彼岸傳來Google千兆寬頻啟動,最低每月70美元的訊息。這讓我們的所謂的寬頻提速情何以堪啊!MD,啥時我們也能享受70元1000M的寬頻?這樣買火車票該有多爽啊!剛又看到一則新聞,[url=http://miit.cci

git推送到github報錯error: The requested URL returned error: 403 Forbidden while accessing https://github.com

rep 發的 rac adc lob hub sta stat forward 最近使用git命令從github克隆倉庫到版本,然後進行提交到github時報錯如下: [[email protected]/* */ git_test]# git push ori

Git使用常見錯誤,建立倉庫-提交程式碼攻略 Github錯誤fatal: Authentication failed for 'https://github.com/ ...

專案開發進入測試階段,公司非IT公司,臨時搭建起來的開發團隊,沒有運維,服務端那邊也沒有提供SVN 或者git地址。所以一個月的時間都是把程式碼放到本地。幸好是公司桌上型電腦,並沒有出現硬碟損壞,程式碼丟失等天災人禍,不過已經進入發版階段,肯定設計開設分支等問題,所以還是抽出一點時間,把程式碼上傳至

解決辦法error: failed to push some refs to 'https://github.com/xxxx.git'

在github遠端建立倉庫後, 利用gitbash進行提交本地檔案的時候出現如下錯誤: [[email protected] demo]# git push -u origin master Username for 'https://github.c

git 報錯error: failed to push some refs to 'https://github.com/Anderson-An/******.git'(已解決)

提交push 報錯: $ git push origin masterTo https://github.com/Anderson-An/******.git ! [rejected] master -> master (fetch first)error: failed to push some r

沒有開花的樹(部落遷移 http://cwqqq.com

IE下實現placeholder效果,支援文字框和密碼框 Apache模組 合併多個js/css 提高網頁載入速度 JavaScript跨域外掛 實現iframe的雙向跨域 改進erlang版本的protobuf,有一定效率提升 Lua非同步HTTPS請求庫,支援同時併發請

Github錯誤fatal: Authentication failed for 'https://github.com/ ...

GitHub push程式碼發生錯誤:fatal: Authentication failed for 'https://github.com/ ... 使用的https提交,在用SourceTree提交程式碼時候發生錯誤,返回的錯誤提示說: fatal: Authent

蒙太奇zz的專欄-部落搬家lizhuolun.com

$ ssh -T [email protected]  The authenticity of host '[ssh.github.com]:443 ([192.30.252.149]:443)' can't be established.  RSA key fingerprint is 16:27

GitHub】建立Git分支將Hexo部落遷移到其它電腦

GitHub+Hexo搭建部落格的過程比較平滑,但是它的配置卻非常耗時間,一旦電腦出現問題或者需要在另外一臺電腦上寫部落格,那麼Hexo部落格的遷移非常就讓人頭疼。下面參考其他部落格的方法,整理出一個能在平時就管理重要檔案的方法,方便隨時遷移 必備