jvm 命令和工具_(dá)個(gè)人渣記錄僅為自己搜索用的博客-CSDN博客
?堆太大?
? 方法1: 重新設(shè)置堆后,重啟,復(fù)現(xiàn).
? 方法2:? 切割
split -b 1M heap.bin smallfile
scp smallfile* username@mac-host:/Users/username/
cat smallfile* > heap.bin
?官網(wǎng)文檔
JProfiler Help - HPROF snapshots
heap walker教學(xué):
用jprofile查看hprof文件_hprof jprofile_java老張的博客-CSDN博客
通識(shí)教學(xué):
JVM監(jiān)控及診斷工具GUI篇之JProfiler_每天都要進(jìn)步一點(diǎn)點(diǎn)的博客-CSDN博客
問(wèn)題: 接口調(diào)用超時(shí)逐步增加
分析 - > 發(fā)現(xiàn)進(jìn)程 cpu占比很高 ->?進(jìn)一步分析是垃圾回收線程一直在工作.?
-> 在看堆 ,堆占滿了.
1. 降低jvm 參數(shù),最大內(nèi)存數(shù), 復(fù)現(xiàn)
2. jmap dump
jmap -dump:live,format=b,file=<filename> <PID>
3. 在JProfiler打開.
4 找到最大size (retained size )的對(duì)象. 一層一層展開 有 %比
?遇到"transitive reference" , 鏈接分析被中斷了. 直接右鍵
選擇 "incoming references"?
?直接定位到源頭, dev環(huán)境的agent 泄露了.? 本地環(huán)境上沒(méi)有這個(gè)agent 看代碼分析肯定也分析不出來(lái).
? ? 問(wèn)題 "transitive reference" 是什么, 如何展開?
在Java語(yǔ)言中,一個(gè)對(duì)象可能會(huì)引用其他對(duì)象,這些被引用的對(duì)象也可能會(huì)引用其他對(duì)象,這樣就形成了一個(gè)對(duì)象的引用鏈。如果在這個(gè)引用鏈中,存在某個(gè)對(duì)象A被其他對(duì)象引用,并且對(duì)象A也直接或間接引用了其他對(duì)象,那么這些被間接引用的對(duì)象就稱為對(duì)象A的傳遞引用(transitive reference)。
在JVM內(nèi)存管理中,如果一個(gè)對(duì)象被其他對(duì)象引用,那么這個(gè)對(duì)象就不能被垃圾回收。如果這個(gè)對(duì)象又間接引用了其他對(duì)象,那么這些間接引用的對(duì)象也不能被垃圾回收。如果這種引用關(guān)系形成了一個(gè)傳遞引用鏈,那么整個(gè)鏈上的所有對(duì)象都不能被垃圾回收,即使它們已經(jīng)變成了不可達(dá)對(duì)象。
5. 選擇最大size的類 . 剛好對(duì)象有重復(fù).
?
在 JProfiler 中,"Use Selected Object"、"Use Selected java.lang.Class Object" 和 "Use Retained Objects" 是三個(gè)不同的選項(xiàng),用于在內(nèi)存分析時(shí)選擇對(duì)象。
-
"Use Selected Object" 選項(xiàng)允許你選擇一個(gè)對(duì)象,然后查看該對(duì)象的引用關(guān)系、內(nèi)存使用情況和方法調(diào)用鏈等信息。該選項(xiàng)適用于分析單個(gè)對(duì)象的內(nèi)存使用情況。
-
"Use Selected java.lang.Class Object" 選項(xiàng)允許你選擇一個(gè)類對(duì)象,然后查看該類的內(nèi)存使用情況、實(shí)例數(shù)量和方法調(diào)用鏈等信息。該選項(xiàng)適用于分析某個(gè)類的內(nèi)存使用情況。
-
"Use Retained Objects" 選項(xiàng)允許你選擇一個(gè)對(duì)象,然后查看該對(duì)象及其引用的其他對(duì)象的內(nèi)存使用情況。該選項(xiàng)適用于分析對(duì)象之間的引用關(guān)系和內(nèi)存泄漏問(wèn)題。
總的來(lái)說(shuō),這三個(gè)選項(xiàng)的區(qū)別在于它們選擇的對(duì)象不同,從而適用于不同的內(nèi)存分析場(chǎng)景。"Use Selected Object" 選項(xiàng)適用于分析單個(gè)對(duì)象的內(nèi)存使用情況,"Use Selected java.lang.Class Object" 選項(xiàng)適用于分析某個(gè)類的內(nèi)存使用情況,"Use Retained Objects" 選項(xiàng)適用于分析對(duì)象之間的引用關(guān)系和內(nèi)存泄漏問(wèn)題。
5.2?湊巧方法: 直接從String 類?著手,排序.
?附錄
retained size等概念
shallow size
? ?Shallow size是指一個(gè)對(duì)象本身占用的內(nèi)存大小,
retained size
? ?而retained size則是指一個(gè)對(duì)象及其引用對(duì)象占用的總內(nèi)存大小。簡(jiǎn)單來(lái)說(shuō),shallow size是指對(duì)象自身占用的內(nèi)存大小,而retained size則是指對(duì)象及其引用的其他對(duì)象占用的總內(nèi)存大小。
deep size?
? deep size是指一個(gè)對(duì)象及其引用對(duì)象占用的總內(nèi)存大小,但只計(jì)算直接引用的對(duì)象。例如,一個(gè)對(duì)象A直接引用B和C兩個(gè)對(duì)象,B對(duì)象又引用D和E兩個(gè)對(duì)象,那么A對(duì)象的deep size就是A、B和C這三個(gè)對(duì)象的總內(nèi)存大小。
因此,Retained size和Deep size的區(qū)別在于計(jì)算引用對(duì)象的深度不同,Retained size會(huì)計(jì)算間接引用的對(duì)象,而Deep size只計(jì)算直接引用的對(duì)象。
問(wèn)題: " Cannot View Allocations from Heapdump in JProfiler"
HPROF snapshots do not contain any information where objects were allocated. You have to use the JProfiler profiling agent and record allocation data before taking a heap snapshot in order to use this functionality.
問(wèn)題 "transitive reference" 是什么, 如何展開?
在Java語(yǔ)言中,一個(gè)對(duì)象可能會(huì)引用其他對(duì)象,這些被引用的對(duì)象也可能會(huì)引用其他對(duì)象,這樣就形成了一個(gè)對(duì)象的引用鏈。如果在這個(gè)引用鏈中,存在某個(gè)對(duì)象A被其他對(duì)象引用,并且對(duì)象A也直接或間接引用了其他對(duì)象,那么這些被間接引用的對(duì)象就稱為對(duì)象A的傳遞引用(transitive reference)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-474605.html
在JVM內(nèi)存管理中,如果一個(gè)對(duì)象被其他對(duì)象引用,那么這個(gè)對(duì)象就不能被垃圾回收。如果這個(gè)對(duì)象又間接引用了其他對(duì)象,那么這些間接引用的對(duì)象也不能被垃圾回收。如果這種引用關(guān)系形成了一個(gè)傳遞引用鏈,那么整個(gè)鏈上的所有對(duì)象都不能被垃圾回收,即使它們已經(jīng)變成了不可達(dá)對(duì)象。
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-474605.html
到了這里,關(guān)于用jprofiler來(lái)分析 jvm 堆 內(nèi)存泄露,fullgc的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!