(轉)如何查看JVM的內存

轉:https://www.cnblogs.com/curedfisher/p/12839485.html

學過java的人都知道,jvm是解釋運行java的,java能夠作爲跨平臺語言,也是因爲jvm的存在,合理的使用jvm內存可以幫助程序很好的運行。那麼,怎麼查看jvm的內存使用情況呢,下面本文介紹一下。可以同步參看鏈接:https://www.vxzsk.com/734.html

方式一

java程序查看

使用java代碼也是可以查看jvm內存使用情況的,如果你經驗比較豐富的話,應該是知道的,那就是使用Runtime,Runtime對java的運行環境進行的封裝,可以得到jvm的狀態信息,使用Runtime.getRuntime()就可以得到Runtime的引用。使用Runtime的maxMemory(),totalMemory(),freeMemory()幾個方法就可以得到jvm的內存使用情況maxMemory是jvm可以從操作系統可以獲得最大內存,totalMemory是jvm已經分配到的內存大小,freeMemory是所分配內存的剩餘大小,可以通過代碼運行查看。

複製代碼
複製代碼
package com.asd.reserve.controller;

/**
 * @author zs
 * @date 2019/12/23 11:23
 */
public class Testszs {

    public static void main(String[] args) {
        Runtime run = Runtime.getRuntime();

        long maxMemory = Runtime.getRuntime().maxMemory();
        long totalMemory = Runtime.getRuntime().totalMemory();
        long freeMemory = Runtime.getRuntime().freeMemory();
        long usableMemony = maxMemory - totalMemory + freeMemory;
        System.out.println("可以獲得最大內存是:"+ maxMemory/1024/1024 + "M");
        System.out.println("已分配到的內存大小是:"+ totalMemory/1024/1024 + "M");
        System.out.println("所分配內存的剩餘大小是:"+ freeMemory/1024/1024 + "M");
        System.out.println("最大可用內存大小是:"+ usableMemony/1024/1024 + "M");

    }
}
複製代碼
複製代碼

方式二

上面說了一下通過java代碼查看jvm內存的使用情況的方法,下面說一下使用jvm工具查看的方法,在jdk的bin目錄下,是有很多命令行工具,這些命令行工具都是可以幫助分析java的運行情況的。下面介紹兩種方式:

1、進入jdk的bin目錄,shift+右鍵 在bin目錄打開命令行窗口,通過jps查看服務的pid,選擇要監控的jvm,執行jamp -heap pid

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

JVM參數類型

1、 標準參數(-)

所有的JVM實現都必須實現這些參數的功能,而且向後兼容。例如:-verbose:class(輸出jvm載入類的相關信息,當jvm報告說找不到類或者類衝突時可此進行診斷);-verbose:gc(輸出每次GC的相關情況);-verbose:jni(輸出native方法調用的相關情況,一般用於診斷jni調用錯誤信息)。
2、 非標準參數(-X)
默認jvm實現這些參數的功能,但是並不保證所有jvm實現都滿足,且不保證向後兼容。例如:-Xms512m;-Xmx512m;-Xmn200m;-Xss128k;-Xloggc:file(與-verbose:gc功能類似,只是將每次GC事件的相關情況記錄到一個文件中,文件的位置最好在本地,以避免網絡的潛在問題。若與verbose命令同時出現在命令行中,則以-Xloggc爲準)。
3、 非Stable參數(-XX)
此類參數各個jvm實現會有所不同,將來可能會隨時取消,需要慎重使用。例如:-XX:PermSize=64m;-XX:MaxPermSize=512m。

2.2 標準參數
1、 -help
2、-server -client
3、 -version -showversion
4、-cp -classpath

2.3 X參數
非標準化參數
-Xint : 解釋執行
-Xcomp:第一次使用就編譯成本地代碼
-Xmixed: 混合模式,JVM自己來決定是否編譯成本地代碼

2.4 XX參數
非標準化參數
相對不穩定
主要用於JVM調優和Debug
XX參數分類:
1、Boolean類型
格式: -XX:[+-]<name> 表示啓用或者禁用name屬性
比如: -XX:+UseConcMarkSweepGC
    -XX:UseG1GC

2、非Boolean類型
格式: -XX:<name>=<value> 表示name屬性的值是value
比如:-XX:MaxGCPauseMillis=500
   XX:GCTimeRatio=19

3、 -Xmx -Xms
不是X參數,而是XX參數
-Xms等價於-XX:InitialHeapSize
-Xmx等價於-XX:MaxHeapSize

3 JVM參數查看
3.1 查看JVM運行時參數
-XX:+PrintFlagsInitial
-XX:+PrintFlagsFinal
-XX:+UnlockExperimentalVMOptions //解鎖實驗參數
-XX:+UnlockDiagnosticVMOptions //解鎖診斷參數
-XX:+PrintCommandLineFlags //打印命令行參數

-XX:+UseSerialGC,虛擬機運行在Client模式下的默認值,Serial+Serial Old。
-XX:+UseParallelGC,虛擬機運行在Server模式下的默認值,Parallel Scavenge+Serial Old(PS Mark Sweep)。
-XX:+UseParNewGC,ParNew+Serial Old,在JDK1.8被廢棄,在JDK1.7還可以使用。
-XX:+UseParallelOldGC,Parallel Scavenge+Parallel Old。
-XX:+UseConcMarkSweepGC,ParNew+CMS+Serial Old。
-XX:+UseG1GC,G1+G1,只支持JDK1.7 14update以上

java -XX:+PrintCommandLineFlags -version //查看jvm默認的垃圾回收器

3.2 參數使用
java -XX:+PrintFlagsInitial -version > PrintFlagsInitial.txt //這個命令的值很多,保存到文件中
java -XX:+PrintFlagsFinal -version > PrintFlagsFinal.txt

3.3 jps 查看java進程
jps //查看java進程
jps -l //顯示完整的類名

3.4 查看正在運行的JVM參數

jinfo -flags pid //查看設置過值的參數
jinfo -flag InitialHeapSize pid //查看初始堆內存
jinfo -flag MaxHeapSize pid //查看最大堆內存
jinfo -flag PermSize pid //查看初始分配的非堆內存
jinfo -flag MaxPermSize pid //查看最大允許分配的非堆內存
jinfo -flag NewSize pid //查看年輕代初始內存
jinfo -flag MaxNewSize pid //查看年輕代最大內存
jinfo -flag NewRatio pid //查看年輕代與年老代的比值
jinfo -flag SurvivorRatio pid //查看年輕代中Eden區與Survivor區的比值
jinfo -flag MaxTenuringThreshold pid //查看對象如果在Survivor區移動了N次還沒有被垃圾回收就進入年老代

jinfo -flag UseSerialGC pid //查看串行收集器
jinfo -flag UseParallelGC pid //查看並行收集器
jinfo -flag UseParNewGC pid //查看並行收集器
jinfo -flag UseParallelOldGC pid //查看並行收集器
jinfo -flag UseConcMarkSweepGC pid //查看CMS回收器
jinfo -flag UseG1GC pid //查看G1回收器
jinfo -flag PrintGCDetails pid //查看是否打印GC日誌

4 JVM常用工具
4.1 jps
jps //查看java進程
jps -l //顯示完整的類名
jmap -heap pid > 1.txt //查看JVM內存配置,參數較多,保存到文件
4.2 jinfo
jinfo -flag InitialHeapSize pid //查看初始堆內存
jinfo -flag MaxHeapSize pid //查看最大堆內存
jinfo -flag PermSize pid //查看初始分配的非堆內存
jinfo -flag MaxPermSize pid //查看最大允許分配的非堆內存
jinfo -flags pid //查看設置過值的參數
jinfo -flag UseConcMarkSweepGC pid //查看垃圾回收器
jinfo -flag UseG1GC pid //查看垃圾回收器
jinfo -flag UseParallelGC pid //查看垃圾回收器

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