源程序技術(shù)方案:
C-JNI-Java
事件起因:
用戶在進(jìn)行性能測(cè)試的過程中,發(fā)現(xiàn)運(yùn)行一段時(shí)間,出現(xiàn)heap中內(nèi)存無法回收芳悲,導(dǎo)致客戶端掛掉
問題排查:
核心思想-什么對(duì)象一直占用內(nèi)存,沒有釋放
排查工具:
gc.log
jvisualvm(查看heap中內(nèi)存變化)
jmap(直觀查看內(nèi)存中對(duì)象占用)
mat (通過餅圖分析)
分析過程
1.分析內(nèi)存中對(duì)象占用
jmap -histo pid
通過上圖可分析:
內(nèi)存中[C 及java.lang.String對(duì)象一直增長(zhǎng),無法回收【注:[C代表char[]】
對(duì)應(yīng)代碼
查看代碼邏輯
通過代碼查看掷邦,字符串對(duì)象collection keyi沒有釋放,添加釋放后椭赋,重新編譯抚岗,持續(xù)運(yùn)行
最終結(jié)果
jmap -histo pid
jvisualvm
通過工具觀察,內(nèi)存回收正常哪怔,沒有內(nèi)存泄露
參考鏈接: