日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA内存分析:基于dump内存溢出快照分析

發布時間:2024/3/26 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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内存溢出快照分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。