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