java應用OutOfMemoryError:java heap space,死鎖,以及cpu負載高問題排查

堆內存溢出(java heap space)

發生堆內存溢出一般有兩種情況,一種是內存泄漏,一種是內存不足。

分析原因

  • 1:利用jmap命令將快照導出
    ps: 若是應用啓動參數加了-XX:+HeapDumpOnOutOfMemoryError參數,直接把hprof文件導入到mat工具即可

jmap -dump:format=b,file=youname.hprof pid

  • 2:利用mat工具分析內存溢出原因

將導出的hprof文件導入到mat工具中,分析原因,mat下載地址


此時我設置的堆內存只有30m,可以看到,是object[]數組的實例,佔用了97.44%的空間
在這裏插入圖片描述
點擊可以查看每個對象的實例個數,以及佔用空間的大小
在這裏插入圖片描述
GCRoot看引用的情況(忽略了虛引用,軟引用)情況,對象可達性分析。

cpu負載變高

  • 查看cpu情況

top

  • 把線程信息打印出來

jstack pid

  • 找到該進程中cpu利用率高的線程

top -p pid -H

  • 將cpu利用率高的線程id轉化爲16進制

printf “%x pid”

在jstack中查找該線程對應的堆棧信息。

發佈了16 篇原創文章 · 獲贊 22 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章