JAVA内存分析:基于dump内存溢出快照分析
JAVA內存分析
JAVA內存分析一:基于dump內存溢出快照分析
JAVA內存分析二:idea集成jprofiler查看JVM內存使用情況
JAVA內存分析三:使用JDK自帶工具進行內存和CPU分析及垃圾回收
引言
Java程序在服務端運行的時候,在長時間運行或者訪問量較大的時候,會遇見內存溢出的情況。
這時如果我們沒有進行JVM的內存分析,將無法對問題進行定位,那么我們即使對服務端進行重啟,在后續的運行過程中,還是會預見內存溢出的情況。
那么我們結合實際情況,通過一些實例來模擬內存溢出的情況,及如何去分析。
正文
1,模擬內存溢出
1.1 新建一個bean對象
package com.moonl.jvm.beans;public class MemoryOverflow { }1.2 建一個main方法來進行程序的運行
package com.moonl.jvm;import com.moonl.jvm.beans.MemoryOverflow; import org.springframework.boot.test.context.SpringBootTest;import java.util.ArrayList; import java.util.List;@SpringBootTest public class MemoryOverflowTest {public static void main(String[] args) {List<MemoryOverflow> list = new ArrayList<>();while (true){list.add(new MemoryOverflow());}} }1.3 設置運行時的內存
這里我們設置運行時的內存為21M
現在我們開始運行程序
這時一段很簡單的代碼,無限循環,不斷的將創建一個對象,并加入到list當中,此時我們發現報錯提示,內存溢出了。
我們生產環境,系統后臺的運行時內存溢出,就這樣模擬出來了。
2,定位問題
當我們生產環境,出現內存溢出之后,面對量級比較大的系統,一般是無法通過日志進行定位內存溢出的位置,那么就需要在運行時,加上一段參數,生成運行時內存溢出的快照。
-Xms21m -Xmx21m -XX:+HeapDumpOnOutOfMemoryError
如圖所示:
運行后,會出現如圖所示:
在程序的工程目錄報里面,我們就可以找到,剛生成的文件快照,但該文件的閱讀方式,需要單獨下載單獨的工具進行查詢。
這里我使用的是:Jprofiler 大家可以去下載,安裝過程不再累述。
3,分析內存溢出的原因
打開Jprofiler—Session—open Snapshot
彈出對話框后,選擇要進行分析的文件
就可以看到是什么原因造成內存溢出的,當然在進行生產環境的內存溢出分析時,需要排查和分析的地方更多
后記
總結一下,本文所述的方法是在采用在vm options:-Xms21m -Xmx21m -XX:+HeapDumpOnOutOfMemoryError,中
添加HeapDumpOnOutOfMemoryError,生成快照日志完成的,下一期,我們將講解通過idea和jprofiler進行整合,查看
內存運行情況。
希望大家給個關注
關注下我的個人公眾號,可以獲取更多的資訊
總結
以上是生活随笔為你收集整理的JAVA内存分析:基于dump内存溢出快照分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 加推人工智能名片如何让制造业打开营销破局
- 下一篇: win10关闭defender