天天看點

java:線上問題排查常用手段

一、jmap找出占用記憶體較大的執行個體

先給個示例代碼:

List中放了1w個Person對象的執行個體,先把這段程式跑起來

javac OOMTest.java

java OOMTest

然後再開一個視窗,jps -l  找出該程式的pid

java:線上問題排查常用手段

然後執行 jmap -histo:live 7320 (注:如果輸出内容太多,隻想看排名前10的,可以加 | head -10)

java:線上問題排查常用手段

輸出結果,會按記憶體使用量,從大到小依次把對象的實際個數,占用記憶體數量(位元組數)列印出來,最後還會輸出彙總資訊

java:線上問題排查常用手段

以上面的示例來說,OOMTest$Person這個類的執行個體數為10000個,總共占用240000位元組(注:即每個執行個體24位元組),這個程式總占用記憶體數為725464位元組,約:0.69M。

另外還有一些[C,[B這類class name,大概意思為:

[C is a char[]

[S is a short[]

[I is a int[]

[B is a byte[]

[[I is a int[][]

[C對象往往跟String有關,String其内部使用final char[]數組來儲存資料的

constMethodKlass/ methodKlass/ constantPoolKlass/ constantPoolCacheKlass/ instanceKlassKlass/ methodDataKlass

與Classloader相關,常駐與Perm區。

二、