一個堆OOM典型問題定位過程

一 發(fā)現(xiàn)問題

1、最近預發(fā)機器發(fā)生了一次莫名其妙的內(nèi)存溢出,可以從下圖看出在下午17:19分左右開始瘋狂的FGC。


image.png

2、內(nèi)存的監(jiān)控可以看的更明顯,在17:19分old直線上升,因為之前出現(xiàn)過metaspace區(qū)不夠的情況,一開始以為又復現(xiàn)這個問題,在檢查相關,dump內(nèi)存和metaspace保留現(xiàn)場證據(jù)后,18:00左右重啟機器,然后內(nèi)存又上去了,這個時候壓力徒增。因為升級了jdk,難道和此次升級jdk有關?


image.png

但是預發(fā)環(huán)境在前一天已經(jīng)部署了新版本jdk,跑了這么久,理論上不會突然出現(xiàn)這種問題。但是內(nèi)存飆升實在太快了,看起來不像系統(tǒng)應用所為。在重復檢查毫無頭緒后,再次嘗試重啟,內(nèi)存回歸正常水平。

二 原因分析

那么這次到底是什么原因呢,畢竟馬上就要發(fā)布到線上了。如果是本次升級jdk導致的,我們需要立馬回滾jdk版本。

1、因為之前出現(xiàn)過metaspace區(qū)溢出的問題,首先分析了dump的metaspace,發(fā)現(xiàn)沒什么異常。

2、緊接著分析dump出來的內(nèi)存信息,首先從圖中已經(jīng)可以看到了可疑點1占用了79.8%的內(nèi)存


image.png

過濾出可疑點的類org.apache.tomcat.util.threads.TaskThread


image.png

右鍵查看引用的old區(qū)對象


image.png

查看對象內(nèi)容


image.png

可以得到關鍵字eveNumber。最終在代碼發(fā)現(xiàn)了這段代碼,當subStockInfoStr值是"20190801-20190901/000000-235959/10",會導致下面的while陷入死循環(huán),不停的newJSONObject,打爆了內(nèi)存。


image.png

同時線上數(shù)據(jù)里面的工單操作記錄也證明是業(yè)務方操作導致,18:00服務器剛起來后,又操作了一次,導致內(nèi)存又飆升,嚇死哥了~


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

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

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