1. 程式人生 > >JVM記憶體分析

JVM記憶體分析

JDK常用內建工具堆疊分析1

  1. jps:檢視當前JVM中執行程序
  2. jstack:列印執行緒堆疊資訊
  3. jstat:JVM監控統計資訊,包括類的載入和解除安裝情況,新生代和老年代的容量、使用情況等資訊
  4. jmap:列印JVM堆內物件情況

定位pid使用 方法1:直接輸入jps(檢視當前使用者java相關所有程序號) 方法2:ps -ef | grep [javaname]檢視pid

檢視佔用CPU高的執行緒

1.使用top 定位到佔用CPU高的程序PID

# top 
# ps aux | grep PID 

jstack使用

2.獲取執行緒資訊,並找到佔用CPU高的執行緒

ps -mp pid -o THREAD,tid,time | sort -rn

3.將需要的執行緒ID轉換為16進位制格式

printf "%x\n" tid

4.列印執行緒的堆疊資訊

jstack pid |grep tid -A 30

jstat使用

JVM監控統計資訊,包括類的載入和解除安裝情況,新生代和老年代的容量、使用情況等資訊。統計維度比較多:

-class -compiler -gc -gccapacity -gccause -gcnew -gcnewcapacity -gcold -gcoldcapacity -gcpermcapacity -gcutil -printcompilation 具體日誌輸出含義,看手冊

jmap使用

jmap -dump:live,format=b,file=< filename> pid

列印JVM堆內物件情況,常用引數有:(具體描述見手冊)

-dump:[live,]format=b,file=< filename>

使用hprof二進位制形式,輸出jvm的heap內容到檔案=. live子選項是可選的,假如指定live選項,那麼只輸出活的物件到檔案。

-finalizerinfo

列印正等候回收的物件的資訊。

-heap

列印heap的概要資訊,GC使用的演算法,heap的配置及wise heap的使用情況。

-histo[:live]

列印每個class的例項數目、記憶體佔用、類全名資訊。VM的內部類名字開頭會加上字首“*”。如果live子引數加上後,只統計活的物件數量。

-clstats

列印classload的資訊。包含每個classloader的名字、活潑性、地址、父classloader和載入的class數量。

-F

在pid沒有響應的時候強制使用-dump或者-histo引數。在這個模式下,live子引數無效。

分析記憶體佔用mat工具使用 檢視

  1. 參考部落格: https://blog.csdn.net/weitry/article/details/53284586 ↩︎