線上jvm OOM(原因:對象實例過多)

因爲報錯錯就是堆內OOM,而不是機器OOM,所以就直接分析jvm堆內存了

jmap dump下來分析JVM內存,發現有一個對象實例很多,很不正常(雖然程序有new該對象,因爲這是個操作記錄,一句qps基本能判斷產生的數量,明顯對不上), 且該對象包含大json,因爲是偶發,所以很詭異。
將近30w的QueryRecord對象,該對象是比較大的
在這裏插入圖片描述
最後排查原因

  • 定時任務拉取操作記錄對象,拉取設置的時間範圍過大,導致拉取實例過多
  • 爲什麼時間範圍過大 =》
    • 使用了一個當前時間和上一次定時任務運行時間
    • 用了本地變量去存儲上一次時間,然後定時任務執行完去更新上一次時間變量

一個實例倒是沒什麼大問題,但多實例且任務是單實例運行定時任務就有問題了。

那麼,要是1個實例今天跑了一次定時任務,然後一直都是其它實例在跑定時任務;那麼突然定時任務選中個這個實例,那麼時間範圍就是【1天前,now】,本來比如說1小時定時任務都是【1小時前,now】的,這樣無形之中犯錯了。

時間:2020-05-26 晚

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章