JVM性能調優監控工具

.Jinfo

查看正在運行的Java應用程序的擴展參數

查看jvm的參數

查看java系統參數

Jstat

jstat命令可以查看堆內存各部分的使用量,以及加載類的數量。命令的格式如下:

jstat [-命令選項] [vmid] [間隔時間/毫秒] [查詢次數]

注意:使用的jdk版本是jdk8.

類加載統計:

  1. Loaded:加載class的數量
  2. Bytes:所佔用空間大小
  3. Unloaded:未加載數量
  4. Bytes:未加載佔用空間
  5. Time:時間

垃圾回收統計:

  1. S0C:第一個倖存區的大小
  2. S1C:第二個倖存區的大小
  3. S0U:第一個倖存區的使用大小
  4. S1U:第二個倖存區的使用大小
  5. EC:伊甸園區的大小
  6. EU:伊甸園區的使用大小
  7. OC:老年代大小
  8. OU:老年代使用大小
  9. MC:方法區大小(元空間)
  10. MU:方法區使用大小
  11. CCSC:壓縮類空間大小
  12. CCSU:壓縮類空間使用大小
  13. YGC:年輕代垃圾回收次數
  14. YGCT:年輕代垃圾回收消耗時間
  15. FGC:老年代垃圾回收次數
  16. FGCT:老年代垃圾回收消耗時間
  17. GCT:垃圾回收消耗總時間

堆內存統計;

  1. NGCMN:新生代最小容量
  2. NGCMX:新生代最大容量
  3. NGC:當前新生代容量
  4. S0C:第一個倖存區大小
  5. S1C:第二個倖存區的大小
  6. EC:伊甸園區的大小
  7. OGCMN:老年代最小容量
  8. OGCMX:老年代最大容量
  9. OGC:當前老年代大小
  10. OC:當前老年代大小
  11. MCMN:最小元數據容量
  12. MCMX:最大元數據容量
  13. MC:當前元數據空間大小
  14. CCSMN:最小壓縮類空間大小
  15. CCSMX:最大壓縮類空間大小
  16. CCSC:當前壓縮類空間大小
  17. YGC:年輕代gc次數
  18. FGC:老年代GC次數

新生代垃圾回收統計:

  1. S0C:第一個倖存區的大小
  2. S1C:第二個倖存區的大小
  3. S0U:第一個倖存區的使用大小
  4. S1U:第二個倖存區的使用大小
  5. TT:對象在新生代存活的次數
  6. MTT:對象在新生代存活的最大次數
  7. DSS:期望的倖存區大小
  8. EC:伊甸園區的大小
  9. EU:伊甸園區的使用大小
  10. YGC:年輕代垃圾回收次數
  11. YGCT:年輕代垃圾回收消耗時間

新生代內存統計:

  1. NGCMN:新生代最小容量
  2. NGCMX:新生代最大容量
  3. NGC:當前新生代容量
  4. S0CMX:最大幸存1區大小
  5. S0C:當前倖存1區大小
  6. S1CMX:最大幸存2區大小
  7. S1C:當前倖存2區大小
  8. ECMX:最大伊甸園區大小
  9. EC:當前伊甸園區大小
  10. YGC:年輕代垃圾回收次數
  11. FGC:老年代回收次數

老年代垃圾回收統計:

  1. MC:方法區大小
  2. MU:方法區使用大小
  3. CCSC:壓縮類空間大小
  4. CCSU:壓縮類空間使用大小
  5. OC:老年代大小
  6. OU:老年代使用大小
  7. YGC:年輕代垃圾回收次數
  8. FGC:老年代垃圾回收次數
  9. FGCT:老年代垃圾回收消耗時間
  10. GCT:垃圾回收消耗總時間

老年代內存統計:

  1. OGCMN:老年代最小容量
  2. OGCMX:老年代最大容量
  3. OGC:當前老年代大小
  4. OC:老年代大小
  5. YGC:年輕代垃圾回收次數
  6. FGC:老年代垃圾回收次數
  7. FGCT:老年代垃圾回收消耗時間
  8. GCT:垃圾回收消耗總時間

元數據空間統計:

  1. MCMN:最小元數據容量
  2. MCMX:最大元數據容量
  3. MC:當前元數據空間大小
  4. CCSMN:最小壓縮類空間大小
  5. CCSMX:最大壓縮類空間大小
  6. CCSC:當前壓縮類空間大小
  7. YGC:年輕代垃圾回收次數
  8. FGC:老年代垃圾回收次數
  9. FGCT:老年代垃圾回收消耗時間
  10. GCT:垃圾回收消耗總時間

  1. S0:倖存1區當前使用比例
  2. S1:倖存2區當前使用比例
  3. E:伊甸園區使用比例
  4. O:老年代使用比例
  5. M:元數據區使用比例
  6. CCS:壓縮使用比例
  7. YGC:年輕代垃圾回收次數
  8. FGC:老年代垃圾回收次數
  9. FGCT:老年代垃圾回收消耗時間
  10. GCT:垃圾回收消耗總時間

 

Jmap

此命令可以用來查看內存信息。

實例個數以及佔用內存大小

打開log.txt,文件內容如下:

  1. num:序號
  2. instances:實例數量
  3. bytes:佔用空間大小
  4. class name:類名稱

堆信息

jmap -heap 進程號

堆內存dump

也可以設置內存溢出自動導出dump文件(內存很大的時候,可能會導不出來)

  1. -XX:+HeapDumpOnOutOfMemoryError
  2. -XX:HeapDumpPath=./   (路徑)

例如:下端代碼

可以用jvisualvm命令工具導入該dump文件分析

 

Jstack

用jstack查找死鎖,見如下示例,也可以用jvisualvm查看死鎖

遠程連接jvisualvm

啓動普通的jar程序JMX端口配置:

java -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -jar foo.jar

tomcat的JMX配置

JAVA_OPTS=-Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false

jvisualvm遠程連接服務需要在遠程服務器上配置host(連接ip 主機名),並且要關閉防火牆

jstack找出佔用cpu最高的堆棧信息

1,使用命令top -p <pid> ,顯示你的java進程的內存情況,pid是你的java進程號,比如4977

2,按H,獲取每個線程的內存情況

3,找到內存和cpu佔用最高的線程tid,比如4977

4,轉爲十六進制得到 0x1371 ,此爲線程id的十六進制表示

5,執行 jstack 4977|grep -A 10 1371,得到線程堆棧信息中1371這個線程所在行的後面10行

6,查看對應的堆棧信息找出可能存在問題的代碼

 

 

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