jvm內存查看操作--筆記


探討過程:

jvm內存(堆內存)了解

jvm內存查看操作--筆記

IDE 改jvm內存大小 打印gc處理日志 ----jprofile內存分析工具使用和分析

 

 

一、Mac下查看已安裝的jdk版本的home目錄

/usr/libexec/java_home -V    (獲得JDK的home目錄路徑)

 

 

 

 

 

 下面的參考: https://www.cnblogs.com/curedfisher/p/12839485.html

工具在jdk的bin目錄里面是jdk自帶的

1、查看java項目jvm內存的大小

1-1:用代碼 見 https://www.cnblogs.com/kaibindirver/p/15982389.html

 

1-2:用 通過jps查看服務的pid,選擇要監控的jvm,執行jmap -heap pid

jps

 

查看虛擬機唯一id

 

 

jps -m 運行時傳入主類的參數;
jps -v 虛擬機參數;  ----這個可以看到啟動時 設置的內存大小
jps -l 運行的主類全名 或者jar包名稱;

 

jps     運行的主類

 

 

 

 

jmap -heap  1993        -----這個我jdk8執行失敗 見 https://blog.csdn.net/claram/article/details/104628583

查看jvm內存情況

 

 

 

 

2、實時查看內存和cpu情況

jconsole就會出現一個可視化的工具框,就可以查看堆內存使用情況,cpu占有率。直接運行jconcole.exe,如下圖所示: 

 

 

 

3、jmap它可以生成 java 程序的 dump 文件,可實現與-XX:+HeapDumpOnOutOfMemoryError相同的效果

jmap -dump:live,format=b,file=myjmapfile.hprof 19570

file=后面也可以指定文件存放的目錄

使用 JProfile 內存分析工具打開  見: https://www.cnblogs.com/kaibindirver/p/15982389.html

 

mat工具點這里看

 

4、Jstat監視虛擬機運行時的狀態信息

堆內存統計

jstat -gccapacity

 

 

  • NGCMN:新生代最小容量
  • NGCMX:新生代最大容量
  • NGC:當前新生代容量
  • S0C:第一個幸存區大小
  • S1C:第二個幸存區的大小
  • EC:伊甸園區的大小
  • OGCMN:老年代最小容量
  • OGCMX:老年代最大容量
  • OGC:當前老年代大小
  • OC:當前老年代大小
  • MCMN:最小元數據容量
  • MCMX:最大元數據容量
  • MC:當前元數據空間大小
  • CCSMN:最小壓縮類空間大小
  • CCSMX:最大壓縮類空間大小
  • CCSC:當前壓縮類空間大小
  • YGC:年輕代gc次數
  • FGC:老年代GC次數

 

垃圾回收統計 (看下是否頻繁fullGC)

  • S0C:第一個幸存區的大小
  • S1C:第二個幸存區的大小
  • S0U:第一個幸存區的使用大小
  • S1U:第二個幸存區的使用大小
  • EC:伊甸園區的大小
  • EU:伊甸園區的使用大小
  • OC:老年代大小
  • OU:老年代使用大小
  • MC:方法區大小
  • MU:方法區使用大小
  • CCSC:壓縮類空間大小
  • CCSU:壓縮類空間使用大小
  • YGC:年輕代垃圾回收次數
  • YGCT:年輕代垃圾回收消耗時間
  • FGC:老年代垃圾回收次數
  • FGCT:老年代垃圾回收消耗時間
  • GCT:垃圾回收消耗總時間

其他屬性見 https://www.cnblogs.com/lizhonghua34/p/7307139.html

 

凡哥說 fullgc 一個小時執行1次比較合理

頻繁GC問題或內存溢出問題

一、使用jps查看線程ID

二、使用jstat -gc 3331 250 20 查看gc情況,一般比較關注PERM區的情況,查看GC的增長情況。     -------這個不錯 可以一段時間內一直打印出內存使用情況

三、使用jstat -gccause:額外輸出上次GC原因

四、使用jmap -dump:format=b,file=heapDump 3331生成堆轉儲文件

五、使用jhat或者可視化工具(Eclipse Memory Analyzer 、IBM HeapAnalyzer)分析堆情況。

六、結合代碼解決內存溢出或泄露問題。

應用的GC負載過高。GC暫停時間越長,應用的吞吐量越低。

 

 

jstack 生成線程快照,定位線程長時間停頓的原因

參考: https://www.cnblogs.com/kongzhongqijing/articles/3630264.html

 

 

澤嵩大佬推薦

https://www.cnblogs.com/sxdcgaq8080/p/11089664.html

 

個人覺得不錯的(有空看下)

https://www.javatang.com/archives/2017/10/20/12131956.html

 

 

 

 

資料鋪墊\原理科普: 

深入理解java虛擬機(全章節完整) https://blog.csdn.net/belongtocode/article/details/104234810

 

 

 

Jstat 是 JDK 自帶的一個輕量級小工具。全稱“Java Virtual Machine statistics monitoring tool”。Jstat 位於 java 的 bin 目錄下,主要利

用 JVM 內建的指令對 Java 應用程序的資源和性能進行實時的命令行的監控,包括了對 Heap size 和垃圾回收狀況的監控。常用命令如下:

命令 1:

jstat -class pid

例子:

jstat -class 2236

說明:類加載信息相關

命令 2:

jstat -gc pid [time]

例子:

jstat -gc 2236

說明:堆垃圾收集統計信息

命令 3:

jstat -gcutil pid例子:

jstat -gcutil 2236

說明:垃圾收集統計信息

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM