導航:首頁 > 編程語言 > javadump分析

javadump分析

發布時間:2023-11-22 15:19:44

java visualvm 堆mp怎麼分析

jmap是java自帶的工具

1. 查看整個JVM內存狀態

jmap -heap [pid]

2. 查看JVM堆中對象詳細佔用情況
jmap -histo [pid]

3. 導出整個JVM 中內存信息,可以利用其它工具打開mp文件分析,例如jdk自帶的visualvm工具

jmap -mp:file=文件名.mp [pid]

② 如何通過mat從java內存mp中找到緩存對象中的所有字元串

生成java內存mp文件

標准做法,jmap mp,需要sudo許可權,另外jmap指定的mp文件一定要是啟動服務的用戶可寫,比如可以新創建一個文件夾

sudo mkdir /home/q/memmp
sudo chown resin:resin /home/q/memmp

sudo -u resin /home/q/java/default/bin/jmap -mp:live,format=b,file=/home/q/memmp/memMap.20130527.hprof ${pid}

把mp文件拿到本地

把mp文件壓縮下,否則會很大,scp到本地

安裝mat

直接在eclipse里:

1.Help->Install New Software

2.輸入update site: http://download.eclipse.org/mat/1.2/update-site/,然後一直next就行了,安裝完重啟eclipse

3.最好創建一個單獨的workspace來放內存mp文件

把mp文件導入mat

1.打開eclipse,選擇上一步你創建的存放內存mp文件的workspace,我本機上是~/mat
2.打開剛才拿到本地的mp文件,然後等著mat解析就完了,注意這時候你可能需要修改eclipse安裝文件下的eclipse.ini,調整下eclipse的jvm參數(xms和xmx),把heap調大些,否則解析過程會報OOM

3.解析完後會生成一個Overview,我們一般會選擇org.apache.catalina.loader.WebappClassLoader,作為分析top
consumer的切入點,這是tomcat上web應用的classloader

4.單擊餅圖上org.apache.catalina.loader.WebappClassLoader的區域,會出現一個彈出菜單,選擇List
Objects->with incoming references,因為所有的web應用內的對象都會引用它們自己的class
loader,也就是org.apache.catalina.loader.WebappClassLoader
5.得到如下所示列表,單擊retained heap這個tab標簽可以排序,選擇按照佔用內存的大小倒排序,得到了top memory
consumers列表

定位緩存對象

我們關心的是top consumer里的RtTreeCache里,有多少重復房型,怎麼得到的呢,follow the steps:

1.查看RtTreeCache對象的outgoing
reference,因為我們需要看這個對象裡面的屬性,屬性對象也就是RtTreeCache對象引用的對象,也就是outgoing reference

2.找到我們需要分析的數據在對象結構中的位置

3.可以看到我們要查找的目標是RtTreeCache對象下的所有HotelRtTree對象的rtReverseMap對象屬性下的table數組內所有entry的key,我們接下來就看看怎麼把這個冗長的關系轉化成一個簡單的OQL語句

寫MAT OQL

OQL是MAT里的一個內嵌查詢語言,它的官方描述很形象:
Memory Analyzer has a built-in object query
language (OQL) that allows to query the heap mp with custom SQL-like queries. Just
think of classes as tables, objects as rows, and fields as columns.

總結

jmap + mat是我們分析java內存的利器,而通過mat
oql,我們可以從mp文件里提取出更多的類似於有多少內容相同的不同字元串對象等信息來幫助我們做技術決策。

閱讀全文

與javadump分析相關的資料

熱點內容
亞馬遜雲伺服器到期了怎麼續費 瀏覽:850
我的世界網易如何在伺服器裡面加光影 瀏覽:284
nat地址訪問外網伺服器 瀏覽:966
怎樣用java編譯一個心形 瀏覽:934
如何使用python中的pygame 瀏覽:836
python實用小工具 瀏覽:24
怎麼在安卓手機上去除馬賽克 瀏覽:235
農行濃情通app怎麼下載 瀏覽:533
怎麼把原文件夾找回來 瀏覽:535
俄羅斯方塊實現python思路 瀏覽:735
漢語拼音英語編譯代碼 瀏覽:501
程序員應具備的能力 瀏覽:606
手機石墨文檔文件夾訪問許可權 瀏覽:656
客戶端如何登陸域文件伺服器 瀏覽:530
兩位數的平方計演算法 瀏覽:930
android圖片分塊 瀏覽:715
圖形平移命令 瀏覽:962
聚類演算法JAVA代碼 瀏覽:407
網站圖標素材壓縮包 瀏覽:892
娛樂化app怎麼做 瀏覽:640