【性能調優】OOM問題分析

OOM發生的一般原因:

  1. 資源不夠
    可能是內存分配過小,而正常業務卻使用了大量的內存
  2. 申請的資源太多
    某一個對象被頻繁的申請,卻沒有被釋放,內存不斷泄露,最終導致內存耗盡
  3. 資源耗盡
    某一個資源被頻繁的申請,系統在資源耗盡,例如不斷的創建線程,不斷的發起網絡連接

定位方法:
步驟一:確認內存本身分配是不是過小

jmap -heap 進程id

在這裏插入圖片描述
步驟二:找到最耗費內存的對象

jmap -histo:live 進程id | more

在這裏插入圖片描述
步驟三:確認資源是否耗盡
pstree和netstat來查看進程創建的線程數,以及網絡連接數等資源是否被耗盡

內存分析簡單有效的方法是通過內存的dump命令,導出內存棧,但是這個命令會進行full GC一次,導出的文件可以通過MAT VisualVM查看
如下圖顯示

showllow heap表示的是對象本身的大小,retained heap表示的是本身的大小加引用的大小
另外如果要定位代碼正在做什麼事情

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