45.出現(xiàn)OOM如何解決

一. 可通過命令定期抓取heap dump或者啟動(dòng)參數(shù)OOM時(shí)自動(dòng)抓取heap dump文件。

二. 通過對(duì)比多個(gè)heap dump,以及heap dump的內(nèi)容,分析代碼找出內(nèi)存占用最多的地方。

三. 分析占用的內(nèi)存對(duì)象,是否是因?yàn)殄e(cuò)誤導(dǎo)致的內(nèi)存未及時(shí)釋放,或者數(shù)據(jù)過多導(dǎo)致的內(nèi)存溢出。


heap dump:

heap dump文件是一個(gè)二進(jìn)制文件,它保存了某一時(shí)刻JVM堆中對(duì)象使用情況。HeapDump文件是指定時(shí)刻的Java堆棧的快照,是一種鏡像文件。Heap Analyzer工具通過分析HeapDump文件,哪些對(duì)象占用了太多的堆棧空間,來發(fā)現(xiàn)導(dǎo)致內(nèi)存泄露或者可能引起內(nèi)存泄露的對(duì)象。

thread dump:

thread dump文件主要保存的是java應(yīng)用中各線程在某一時(shí)刻的運(yùn)行的位置,即執(zhí)行到哪一個(gè)類的哪一個(gè)方法哪一個(gè)行上。thread dump是一個(gè)文本文件,打開后可以看到每一個(gè)線程的執(zhí)行棧,以stacktrace的方式顯示。通過對(duì)thread dump的分析可以得到應(yīng)用是否“卡”在某一點(diǎn)上,即在某一點(diǎn)運(yùn)行的時(shí)間太長(zhǎng),如數(shù)據(jù)庫(kù)查詢,長(zhǎng)期得不到響應(yīng),最終導(dǎo)致系統(tǒng)崩潰。單個(gè)的thread dump文件一般來說是沒有什么用處的,因?yàn)樗皇怯涗浟四骋粋€(gè)絕對(duì)時(shí)間點(diǎn)的情況。比較有用的是,線程在一個(gè)時(shí)間段內(nèi)的執(zhí)行情況。兩個(gè)thread dump文件在分析時(shí)特別有效,困為它可以看出在先后兩個(gè)時(shí)間點(diǎn)上,線程執(zhí)行的位置,如果發(fā)現(xiàn)先后兩組數(shù)據(jù)中同一線程都執(zhí)行在同一位置,則說明此處可能有問題,因?yàn)槌绦蜻\(yùn)行是極快的,如果兩次均在某一點(diǎn)上,說明這一點(diǎn)的耗時(shí)是很大的。通過對(duì)這兩個(gè)文件進(jìn)行分析,查出原因,進(jìn)而解決問題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容