記一次記憶體溢位(PermGen Space)的坑

2021-08-28 13:51:52 字數 793 閱讀 4598

環境:jdk1.6 

使用技術:urlclassloader

事件描述:使用urlclassloader類載入器,實現熱部署。定時任務載入jar包,任務執行300次左右就會報:permgen space

分析過程:

1.檢視記憶體使用情況: jmap -heap pid     (jdk8以後檢視元空間大小:jstat -gc pid)

2.檢視持久代具體情況:jmap -permstat pid > perm.txt  (jdk8以後檢視元空間詳細占用:jmap -clstats)

3.生成記憶體分析檔案 jmap -dump:format=b,file=dumpfilename.hprof pid    (需借助mat工具分析)

分析結果:任務完成後,載入在永久代的urlclassloader類不能被gc。urlclassloader不被gc,那就說明urlclassloader熱載入的類中有物件沒有被gc,通過mat解析dumpfilename.hprof檔案,發現fastjson(版本1.1.28)的幾個類占用堆區很大空間不被gc。

元凶:listslotresult2=json.parsearray(slot_results, slotresult2.class);

json.parsearray(json陣列轉list)這個方法以前沒有用過,將這個方法替換掉歷時兩周的問題完美解決。json.parsearray為什麼不釋放記憶體我就不知道了。

記一次tomcat記憶體大漲到溢位的經歷

前一段時間提交了乙個產品版本給測試人員測試,測試結果簡直出人意料!測試一段時間後頁面就卡死了,當時根據這個現象下意識的懷疑是卡到資料庫這一層,然後檢視資料庫連線相關的引數,如意料之中的相似,連線數太多了!當把資料庫連線數解決後,本以為這個bug解決了,但是.測試一段時間後頁面又卡死了!開啟任務管理器...

記一次goto記憶體洩漏

學習c語言時一直被告誡盡量不要使用goto語句,所以對其了解很少。在一次專案使用時由於之前的程式已經使用了goto,按照自己的理解去處理,結果導致記憶體未釋放。例子如下 include int main return 0 error printf aaaaa n printf 11111.n ret...

記一次線上int溢位問題

今天吃完飯會辦公室,突然接到群裡的bug,線上預算資料出現了負值,如圖 於是一路奔回辦公室,各種分析日誌邏輯,分析了5個小時無果,因為印象中int的範圍是21億,而負值末尾是非零,因此一開始就否定了是int溢位的問題 後來還是其他小夥伴看到了 問題,原 如下 左邊是修改前的,右邊是修改後的 我的入參...