亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

javacore 和 heapdump 中的堆大?。篒BM JVM 上的 20 倍差異

javacore 和 heapdump 中的堆大小:IBM JVM 上的 20 倍差異

慕哥9229398 2021-06-29 13:00:49
注意到生產服務器 (Websphere8.5.5) 開始消耗大量內存。javacore dump 中的數字清楚地表明罪魁禍首是一個過度生長的堆:|  +--Memory Manager (GC): 5,496,900,272 bytes / 3193 allocations|  |  ||  |  +--Java Heap: 5,368,770,560 bytes / 1 allocation|  |  ||  |  +--Other: 128,129,712 bytes / 3192 allocations  但同時,在 MAT 中打開的 heap dump 報告堆的總體積約為 200M(有時高達 300M,但絕不會更多)。它的真正含義是什么?堆轉儲值得信賴嗎?如果是,有沒有辦法釋放未使用的堆內存?
查看完整描述

1 回答

?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

NATIVEMEMINFO部分顯示了虛擬內存,因此5,368,770,560僅表示 JVM 已為堆虛擬分配了那么多內存。實際駐留多少將取決于實際堆大小和堆使用情況。例如,如果在tenured region中堆積了大量垃圾,然后在full GC中被清除,那么這些頁面可能在某個時候成為常駐頁面,但實際存活的數量取決于許多因素。我相信當 JVM 啟動時,它實際上分配了 的完整大小,-Xmx所以我認為你總是會在 NATIVEMEMINFO 中看到堆的完整大小(也可能是它只分配了-Xms,所以如果你看到的大于-Xms,那么這意味著壓力驅動堆增加[當然,注意正常的鋸齒])。

當您在 MAT 中加載轉儲時,它會運行完整的垃圾回收并默認從主視圖中刪除所有無法訪問的對象。您可以單擊“概覽”頁面上的“無法訪問的對象直方圖”鏈接并滾動到底部的淺堆總數總和行,以查看堆轉儲中有多少“垃圾”。MAT 首選項中還有一個選項“保留無法訪問的對象”,它將所有這些對象保留在主 MAT 視圖中,但這通常不是很有用。

所以基本的答案是 MAT 只顯示活動對象,所以在你轉儲時,有 200-300MB 的活動對象。其余的可能在垃圾箱中,或者根本不存在,而 NATIVEMEMINFO 只是顯示虛擬大小。

隨著時間的推移查看堆使用情況的更好方法是在GCMV 中使用 verbosegc 和 load :

-Xverbosegclog:verbosegc.%seq.log,20,50000


查看完整回答
反對 回復 2021-07-07
  • 1 回答
  • 0 關注
  • 277 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號