排查個jvm 記憶體占用持續增加的問題,紀錄一下,引以為戒。
運維發現應用jvm記憶體占用在發布後回落,然後持續增高,,dump後分析一下:
佔記憶體的大部分是這種名字相似的bean,**會產生這麼多相同類產生的bean呢?
應用使用了動態語言groovy,請求走邏輯時,動態拿到指令碼執行。
其中核心**就是groovy指令碼轉成spring ioc 管理的bean,需要注入依賴其他bean:
publict getscriptedobject(string scriptname, string scriptsource, classcls)
} catch
(unsatisfieddependencyexception ex) catch
(exception ex) 異常:{}", scriptname, ex);
throw
newruntimeexception(ex);
}if(cls.isassignablefrom(goo.getclass()))
else
}
這個產生bean的**一定是多例了:解決方案就是在外層加乙個快取的map,來保證單例,如此就會失去指令碼無發布便捷修改邏輯的優勢,所以要做乙個清除map的功能,可以手動觸發,也可以定時觸發。beanfactory.autowirebeanproperties(goo, 1, true
);果然:
問題解決了,原因就是開發的時候沒有很好的理解spring api內部實現。
感謝一路有你~
問題排查之JVM記憶體洩漏
問題排查之jvm記憶體洩漏 1.問題描述,部署在客戶伺服器上的資料閘道器專案,客戶開發反應,出現伺服器記憶體占用很高的問題,懷疑是否為我們部署的專案導致?開始排查 一 endif 登入到客戶伺服器,首先確認是否是我們應用占用的記憶體 endif 檢視記憶體占用排行 ps aux sort k4,4n...
如何排查JVM記憶體問題並定位
今天收到測試小姐姐提的bug,在進行壓測的時,記憶體和cpu都飆高,要我分析一下。使用jdk自帶的 jvisualvm.exe 功能 在jdk的bin目錄下 如果是記憶體洩漏,堆記憶體會一直往上飆,然後會出現瘋狂gc的情況。我這裡沒有出現瘋狂gc的情況,而是有規律的gc,但每次gc的時候cpu都會飆...
一次jvm記憶體溢位問題排查
首先看下問題原因 上圖的意思是獲取直接記憶體失敗,然後jvm建議減少堆的大小,或者減小每個執行緒的大小,或者增加系統記憶體 觀察下執行緒的狀態 目前總共產生了十三萬個執行緒池 編寫存在問題,一般情況下不會有這麼多執行緒池 且統計了一下,存在十三萬的執行緒都處於阻塞狀態 開始使用jstack l pi...