
代碼如圖,單執行緒的一個簡單的監控資料入庫的程式。Timer 的 run() 方法中呼叫了三個方法,前兩個方法回傳統計結果,傳入第三個方法發送郵件。
啟動時占用記憶體50M左右,然后一直緩慢增長,雖然增長很慢,但早晚會溢位,如果是運行在服務器上后果不敢想象。
求解答~
uj5u.com熱心網友回復:
代碼沒貼全,通過描述分析,可能是某個集合物件里的資料越來越多,沒有清理機制,記憶體緩慢增長的話大概率是這種情況針對代碼內的公共list,set,map等,如果資料是不停的往里添加,需要有定時的清理機制或者備份機制,比如說超過多大,把資料全部刷到資料庫或者redis或者檔案中,然后清掉原來的集合
uj5u.com熱心網友回復:
你這沒人能幫你看uj5u.com熱心網友回復:
用jprofile看看堆吧,看看哪些物件沒被gcuj5u.com熱心網友回復:
感謝回答,公共集合是存的某個目錄下的子目錄名稱,數量很少,而且每天運行一次,不運行的話是不會修改的。
uj5u.com熱心網友回復:
昨天用Timer 的時候用法錯了,只傳入了首次運行時間,誤以為自動識別為每天的這個時間點,沒有傳入頻率,第二天一看記憶體達到了400m。
剛才補充了頻率引數,本地測驗發現問題被解決了,峰值到達60m左右后會開始下降。現在放到服務器上再看一段時間。
還挺奇怪的,只傳入首次啟動時間的話不是相當于運行一次就結束嗎,為什么程式沒有退出呢。
uj5u.com熱心網友回復:
好的,我監控一下,感謝
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/285300.html
標籤:Java相關