天天看點

JVM調試常用指令指令 jps jstat jinfo jmap jhat jstackJVM調試指令

JVM調試指令

  • JVM調試指令
    • jps: 虛拟機程序狀況工具
      • 預設查詢
      • 輸出本地虛拟機唯一ID
      • 輸出主類函數的參數
      • 輸出主類的全名
      • 輸出JVM參數
    • jstat: 虛拟機統計資訊監視工具
      • 監視堆狀态
      • 監視消耗時間
      • 各區最值
      • 各區百分比
      • 上次垃圾回收的原因
      • 監視新生代
      • 監視新生代最值
      • 監視老年代
      • 監視老年代最值
      • 監視永生代最值
      • 輸出即時編譯器資訊
      • 輸出被即時編譯的方法
    • jinfo: Java配置資訊工具
      • 輸出JVM的參數
      • 輸出Java系統屬性
    • jmap: Java記憶體映像工具
    • jhat: 虛拟機堆轉儲快照分析工具
    • jstack: Java堆棧跟蹤工具

jps: 虛拟機程序狀況工具

jps( JVM Process Status Tool) : 輸出正在運作的虛拟機程序, 并顯示虛拟機執行主類( Main Class, main()函數所在的類) 名稱 和 這些程序的本地虛拟機唯一ID( LVMID, Local Virtual Machine Identifier)

預設查詢

jps
           
C:\Users\cpucode>jps
14104 EdenSurvivorTest
12716 Launcher
15116 Jps
8668
           
JVM調試常用指令指令 jps jstat jinfo jmap jhat jstackJVM調試指令

輸出本地虛拟機唯一ID

C:\Users\cpucode>jps -q
14104
328
12716
8668
           
JVM調試常用指令指令 jps jstat jinfo jmap jhat jstackJVM調試指令

輸出主類函數的參數

C:\Users\cpucode>jps -m
17524 Jps -m
14104 EdenSurvivorTest
12716 Launcher D:/Program Files/JetBrains/IntelliJ IDEA 2020.2.3/lib/netty-buffer-4.1.47.Final.jar;
D:/Program Files/JetBrains/IntelliJ IDEA 2020.2.3/lib/log4j.jar;
D:/Program Files/JetBrains/IntelliJ IDEA 2020.2.3/lib/maven-builder-support-3.6.1.jar;
D:/Program Files/JetBrains/IntelliJ IDEA 2020.2.3/lib/jps-model.jar;
D:/Program Files/JetBrains/IntelliJ IDEA 2020.2.3/lib/maven-artifact-3.6.1.jar;
D:/Program Files/JetBrains/IntelliJ IDEA 2020.2.3/lib/gson-2.8.6.jar;
D:/Program Files/JetBrains/IntelliJ IDEA 2020.2.3/lib/nanoxml-2.2.3.jar;
D:/Program Files/JetBrains/IntelliJ IDEA 2020.2.3/lib/plexus-component-annotations-1.7.1.jar;
D:/Program Files/JetBrains/IntelliJ IDEA 2020.2.3/lib/util.jar;
D:/Program Files/JetBrains/IntelliJ IDEA 2020.2.3/lib/commons-lang3-3.9.jar;
D:/Program Files/JetBrains/IntelliJ IDEA 2020.2.3/lib/plexus-utils-3.2.0.jar;
D:/Program Files/JetBrains/IntelliJ IDEA 2020.2.3/lib/maven-repository-metadata-3.6.1.jar;
D:/Program Files/JetBrains/IntelliJ IDEA 2020.2.3/lib/maven-resolver
8668
           
JVM調試常用指令指令 jps jstat jinfo jmap jhat jstackJVM調試指令

輸出主類的全名

C:\Users\cpucode>jps -l
11392 jdk.jcmd/sun.tools.jps.Jps
14104 com.cpucode.java.heap.EdenSurvivorTest
12716 org.jetbrains.jps.cmdline.Launcher
8668
           
JVM調試常用指令指令 jps jstat jinfo jmap jhat jstackJVM調試指令

輸出JVM參數

C:\Users\cpucode>jps -v
14104 EdenSurvivorTest 
-javaagent:
D:\Program Files\JetBrains\IntelliJ IDEA 2020.2.3\lib\idea_rt.jar=54054:
D:\Program Files\JetBrains\IntelliJ IDEA 2020.2.3\bin 
-Dfile.encoding=UTF-8

12716 Launcher -Xmx700m -Djava.awt.headless=true -Djava.endorsed.dirs="" 
-Djdt.compiler.useSingleThread=true 
-Dpreload.project.path=D:/Date/github/java 
-Dpreload.config.path=
C:/Users/cpucode/AppData/Roaming/JetBrains/IntelliJIdea2020.2/options 
-Dcompile.parallel=false 
-Drebuild.on.dependency.change=true 
-Dio.netty.initialSeedUniquifier=5740358244341838324 -Dfile.encoding=GBK 
-Duser.language=
zh -Duser.country=CN -Didea.paths.selector=IntelliJIdea2020.2 
-Didea.home.path=
D:\Program Files\JetBrains\IntelliJ IDEA 2020.2.3 
-Didea.config.path=
C:\Users\cpucode\AppData\Roaming\JetBrains\IntelliJIdea2020.2 
-Didea.plugins.path=
C:\Users\cpucode\AppData\Roaming\JetBrains\IntelliJIdea2020.2\plugins 
-Djps.log.dir=
C:/Users/cpucode/AppData/Local/JetBrains/IntelliJIdea2020.2/log/build-log 
-Djps.fallback.jdk.home=
D:/Program Files/JetBrains/IntelliJ IDEA 2020.2.3/jbr 
-Djps.fallback.jdk.version=11.0.8 -Dio.netty.noUnsafe=true 
-Djava.io.tmpdir=
C:/Users/cpucode/AppData/Local/JetBrains/IntelliJIdea2020.2/compile
-server/java_e852b51c/_temp_ 
-Djps.b

4956 Jps -Dapplication.home=D:\Program Files\java\jdk-14.0.2 
-Xms8m 
-Djdk.module.main=jdk.jcmd

8668  exit -Xms128m -Xmx1966m 
-XX:ReservedCodeCacheSize=240m 
-XX:+UseConcMarkSweepGC 
-XX:SoftRefLRUPolicyMSPerMB=50 -ea 
-XX:CICompilerCount=2 
-Dsun.io.useCanonPrefixCache=false 
-Djdk.http.auth.tunneling.disabledSchemes="" 
-XX:+HeapDumpOnOutOfMemoryError 
-XX:-OmitStackTraceInFastThrow 
-Djdk.attach.allowAttachSelf=true 
-Dkotlinx.coroutines.debug=off 
-Djdk.module.illegalAccess.silent=true 
-javaagent:C:\Users\Public\.jetbrains\jetbrains-agent-v3.2.0.0f1f.69e=6e68f9eb,
HbVMaxqQrTt4UvDUk8fhyFT7uRdv48bqJsQMwVFp53YH9PZC9l+ZxAgnA60cLwwhURw
/e4DcZZtle4tQzur4yWRk35qghES4JLFlmKty
/UNiYh6RZyXeCNPTCvIqxT9HR2YKqQT93be6AfLTcbJwPSLO201g+HbMbg6+aK1MUJI 
-Djb.vmOptionsFile=
C:\Users\cpucode\AppData\Roaming\JetBrains\IntelliJIdea2020.2\idea64.exe.vmoptions 
-Djava.library.path=
D:\Program Files\JetBrains\IntelliJ IDEA 2020.2.3\jbr\\bin;
D:\Program Files\JetBrains\IntelliJ IDEA 2020.2.3\jbr\\bin\server 
-Didea.jre.check=true 
-Dide.native.launcher=true 
-Didea.vendor.name=JetBrains 
-Didea.paths.selector=IntelliJIdea2020.2 
-XX:ErrorFile=C:\Users\c
           
JVM調試常用指令指令 jps jstat jinfo jmap jhat jstackJVM調試指令

jstat: 虛拟機統計資訊監視工具

jstat( JVM Statistics Monitoring Tool) : 監視虛拟機各種運作狀态資訊。 顯示本地或者遠端虛拟機程序中的類加載、 記憶體、 垃圾收集、 即時編譯等運作時資料

監視堆狀态

C:\Users\cpucode>jps
16624 Jps
19560 HeapInstanceTest
20412 Launcher
8668

C:\Users\cpucode>jstat -gc 19560
 S0C      S1C       S0U     S1U     EC       EU       OC         OU       MC     MU    
226304.0 269312.0 197949.6  0.0  241152.0  85152.9  938496.0  550343.3  4864.0 3837.2
CCSC   CCSU   YGC    YGCT   FGC    FGCT    CGC    CGCT    GCT
512.0  416.2   6    0.183    3     0.124    -      -     0.308
           
JVM調試常用指令指令 jps jstat jinfo jmap jhat jstackJVM調試指令

監視消耗時間

C:\Users\cpucode>jps
20160 Launcher
19672 HeapInstanceTest
15132 Jps
8668

C:\Users\cpucode>jstat -class 19672
Loaded  Bytes    Unloaded  Bytes   Time
 616    1273.5     0        0.0    0.13
           
JVM調試常用指令指令 jps jstat jinfo jmap jhat jstackJVM調試指令

各區最值

C:\Users\cpucode>jstat -gccapacity 19672
 NGCMN    NGCMX     NGC     S0C        S1C      EC        OGCMN      OGCMX       OGC      OC       
83968.0 1342464.0 1342464.0 447488.0 447488.0 447488.0   167936.0  2685952.0  1980928.0  1980928.0      
MCMN     MCMX      MC       CCSMN    CCSMX      CCSC    YGC   FGC   CGC
0.0    1056768.0   4864.0   0.0     1048576.0   512.0   10     5     -
           
JVM調試常用指令指令 jps jstat jinfo jmap jhat jstackJVM調試指令

各區百分比

  • 新生代Eden區(E, 表示Eden) : 使用了99.72%的空間
  • 2個Survivor區(S0、 S1, 表示Survivor0、 Survivor1) : 使用 99.96% 0.00%
  • 老年代(O, 表示Old) : 使用 47.20%的空間
  • 元空間(M, 表示 Metaspace) : 使用41.42%
  • 共發生Minor GC(YGC, 表示Young GC) : 16次, 總耗時0.105秒;
  • 發生Full GC(FGC, 表示Full GC): 3次, 總耗時(FGCT, 表示Full GC Time) 為0.472秒;
  • 所有GC總耗時(GCT, 表示GC Time) : 1.017秒
C:\Users\cpucode>jstat -gcutil 19672
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT    CGC   CGCT   GCT
 99.96   0.00  99.72  72.03  78.90  81.28   10    0.632     5    0.385    -      -    1.017
           
JVM調試常用指令指令 jps jstat jinfo jmap jhat jstackJVM調試指令

上次垃圾回收的原因

C:\Users\cpucode>jstat -gccause 19672
  S0     S1     E      O      M     CCS     YGC    YGCT    FGC   FGCT    CGC   CGCT    GCT       LGCC             GCC
 19.30   0.00  28.69  99.67  78.90  81.28   12     0.977    7    0.651    -     -    1.628  Allocation Failure   No GC
           
JVM調試常用指令指令 jps jstat jinfo jmap jhat jstackJVM調試指令

監視新生代

C:\Users\cpucode>jstat -gcnew 2668
 S0C      S1C       S0U    S1U   TT  MTT   DSS       EC       EU       YGC    YGCT
386048.0 239104.0   0.0  42442.8  5  15  386048.0  235520.0  21311.8    7     0.272
           
JVM調試常用指令指令 jps jstat jinfo jmap jhat jstackJVM調試指令

監視新生代最值

C:\Users\cpucode>jstat -gcnewcapacity 2668
 NGCMN      NGCMX      NGC     S0CMX     S0C     S1CMX     S1C       ECMX        EC        YGC   FGC   CGC
83968.0  1342464.0  1342464.0 447488.0 447488.0 447488.0 417280.0  1341440.0   333312.0     9     4     -
           
JVM調試常用指令指令 jps jstat jinfo jmap jhat jstackJVM調試指令

監視老年代

C:\Users\cpucode>jstat -gcold 2668
   MC       MU      CCSC     CCSU       OC          OU         YGC    FGC    FGCT    CGC    CGCT    GCT
  4864.0   3837.5    512.0    416.2   2016256.0   1432084.3    10     5    0.344     -        -    0.920
           
JVM調試常用指令指令 jps jstat jinfo jmap jhat jstackJVM調試指令

監視老年代最值

C:\Users\cpucode>jstat -gcoldcapacity 2668
   OGCMN       OGCMX        OGC         OC       YGC   FGC    FGCT    CGC    CGCT     GCT
   167936.0   2685952.0   2016256.0   2016256.0    10     5    0.344     -        -    0.920
           
JVM調試常用指令指令 jps jstat jinfo jmap jhat jstackJVM調試指令

監視永生代最值

隻能用到 JDK7之前 才能使用

輸出即時編譯器資訊

C:\Users\cpucode>jstat -compiler 9104
Compiled Failed Invalid   Time   FailedType FailedMethod
      83      0       0     0.06          0
           
JVM調試常用指令指令 jps jstat jinfo jmap jhat jstackJVM調試指令

輸出被即時編譯的方法

C:\Users\cpucode>jstat -printcompilation 9104
Compiled  Size  Type      Method
   83     65     1     java/util/Random next
           
JVM調試常用指令指令 jps jstat jinfo jmap jhat jstackJVM調試指令

jinfo: Java配置資訊工具

jinfo( Configuration Info for Java) : 實時檢視和調整虛拟機各項參數

輸出JVM的參數

C:\Users\cpucode>jinfo -flags 18632
VM Flags:
-XX:CICompilerCount=12 -XX:InitialHeapSize=257949696 
-XX:MaxHeapSize=4125097984 -XX:MaxNewSize=1374683136 
-XX:MinHeapDeltaBytes=524288 -XX:NewSize=85983232 
-XX:OldSize=171966464 -XX:+UseCompressedClassPointers 
-XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation 
-XX:+UseParallelGC
           
JVM調試常用指令指令 jps jstat jinfo jmap jhat jstackJVM調試指令

輸出Java系統屬性

C:\Users\cpucode>jinfo -sysparops 18632
Java System Properties:
#Mon Jan 18 19:46:17 CST 2021
java.runtime.name=OpenJDK Runtime Environment
sun.boot.library.path=D\:\\Program Files\\Java\\jdk8u272-b10\\jre\\bin
java.vm.version=25.272-b10
java.vm.vendor=AdoptOpenJDK
java.vendor.url=https\://adoptopenjdk.net/
path.separator=;
java.vm.name=OpenJDK 64-Bit Server VM
file.encoding.pkg=sun.io
user.script=
user.country=CN
sun.java.launcher=SUN_STANDARD
sun.os.patch.level=
java.vm.specification.name=Java Virtual Machine Specification
user.dir=D\:\\Date\\github\\java
java.runtime.version=1.8.0_272-b10
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs=D\:\\Program Files\\Java\\jdk8u272-b10\\jre\\lib\\endorsed
os.arch=amd64
java.io.tmpdir=C\:\\Users\\cpucode\\AppData\\Local\\Temp\\
line.separator=\r\n
java.vm.specification.vendor=Oracle Corporation
user.variant=
os.name=Windows 10
sun.jnu.encoding=GBK
java.library.path=D\:\\Program Files\\Java\\jdk8u272-b10\\bin;C\:\\Windows\\Sun\\Java\\bin;C\:\\Windows\\system32;C\:\\Windows;C\:\\Program Files (x86)\\Common Files\\Oracle\\Java\\javapath;C\:\\Windows\\system32;C\:\\Windows;C\:\\Windows\\System32\\Wbem;C\:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;C\:\\Windows\\System32\\OpenSSH\\;D\:\\Program Files\\nodejs\\;D\:\\Program Files\\java\\jdk-14.0.2\\bin;D\:\\Program Files\\Java\\jdk8u272-b10\\bin;D\:\\Program Files\\Java\\jdk8u272-b10\\jre\\bin;D\:\\Program Files\\MySQL\\MySQL Server 5.5\\bin;D\:\\Program Files\\apache-maven-3.6.3\\bin;D\:\\Program Files\\Python\\install\\Scripts\\;D\:\\Program Files\\Python\\install\\;D\:\\Program Files\\Java\\jdk-14.0.2\\bin;C\:\\Users\\cpucode\\AppData\\Local\\Microsoft\\WindowsApps;D\:\\Microsoft VS Code\\bin;D\:\\Git\\bin;C\:\\Users\\cpucode\\AppData\\Roaming\\npm;C\:\\Program Files\\Bandizip\\;D\:\\Program Files\\Python\\install;D\:\\Program Files\\Python\\install\\Scripts;D\:\\Program Files\\MySQL\\mysql-8.0.21-winx64\\bin;;.
java.specification.name=Java Platform API Specification
java.class.version=52.0
sun.management.compiler=HotSpot 64-Bit Tiered Compilers
os.version=10.0
user.home=C\:\\Users\\cpucode
user.timezone=Asia/Shanghai
java.awt.printerjob=sun.awt.windows.WPrinterJob
file.encoding=UTF-8
java.specification.version=1.8
java.class.path=D\:\\Program Files\\Java\\jdk8u272-b10\\jre\\lib\\charsets.jar;D\:\\Program Files\\Java\\jdk8u272-b10\\jre\\lib\\ext\\access-bridge-64.jar;D\:\\Program Files\\Java\\jdk8u272-b10\\jre\\lib\\ext\\cldrdata.jar;D\:\\Program Files\\Java\\jdk8u272-b10\\jre\\lib\\ext\\dnsns.jar;D\:\\Program Files\\Java\\jdk8u272-b10\\jre\\lib\\ext\\jaccess.jar;D\:\\Program Files\\Java\\jdk8u272-b10\\jre\\lib\\ext\\localedata.jar;D\:\\Program Files\\Java\\jdk8u272-b10\\jre\\lib\\ext\\nashorn.jar;D\:\\Program Files\\Java\\jdk8u272-b10\\jre\\lib\\ext\\sunec.jar;D\:\\Program Files\\Java\\jdk8u272-b10\\jre\\lib\\ext\\sunjce_provider.jar;D\:\\Program Files\\Java\\jdk8u272-b10\\jre\\lib\\ext\\sunmscapi.jar;D\:\\Program Files\\Java\\jdk8u272-b10\\jre\\lib\\ext\\sunpkcs11.jar;D\:\\Program Files\\Java\\jdk8u272-b10\\jre\\lib\\ext\\zipfs.jar;D\:\\Program Files\\Java\\jdk8u272-b10\\jre\\lib\\jce.jar;D\:\\Program Files\\Java\\jdk8u272-b10\\jre\\lib\\jfr.jar;D\:\\Program Files\\Java\\jdk8u272-b10\\jre\\lib\\jsse.jar;D\:\\Program Files\\Java\\jdk8u272-b10\\jre\\lib\\management-agent.jar;D\:\\Program Files\\Java\\jdk8u272-b10\\jre\\lib\\resources.jar;D\:\\Program Files\\Java\\jdk8u272-b10\\jre\\lib\\rt.jar;D\:\\Date\\github\\java\\out\\production\\JVM;D\:\\Program Files\\JetBrains\\IntelliJ IDEA 2020.2.3\\lib\\idea_rt.jar
user.name=cpucode
java.vm.specification.version=1.8
sun.java.command=com.cpucode.java.heap.HeapInstanceTest
java.home=D\:\\Program Files\\Java\\jdk8u272-b10\\jre
sun.arch.data.model=64
user.language=zh
java.specification.vendor=Oracle Corporation
awt.toolkit=sun.awt.windows.WToolkit
java.vm.info=mixed mode
java.version=1.8.0_272
java.ext.dirs=D\:\\Program Files\\Java\\jdk8u272-b10\\jre\\lib\\ext;C\:\\Windows\\Sun\\Java\\lib\\ext
sun.boot.class.path=D\:\\Program Files\\Java\\jdk8u272-b10\\jre\\lib\\resources.jar;D\:\\Program Files\\Java\\jdk8u272-b10\\jre\\lib\\rt.jar;D\:\\Program Files\\Java\\jdk8u272-b10\\jre\\lib\\sunrsasign.jar;D\:\\Program Files\\Java\\jdk8u272-b10\\jre\\lib\\jsse.jar;D\:\\Program Files\\Java\\jdk8u272-b10\\jre\\lib\\jce.jar;D\:\\Program Files\\Java\\jdk8u272-b10\\jre\\lib\\charsets.jar;D\:\\Program Files\\Java\\jdk8u272-b10\\jre\\lib\\jfr.jar;D\:\\Program Files\\Java\\jdk8u272-b10\\jre\\classes
java.vendor=AdoptOpenJDK
file.separator=\\
java.vendor.url.bug=https\://github.com/AdoptOpenJDK/openjdk-support/issues
sun.io.unicode.encoding=UnicodeLittle
sun.cpu.endian=little
sun.desktop=windows
sun.cpu.isalist=amd64

VM Flags:
-XX:CICompilerCount=12 -XX:InitialHeapSize=257949696 -XX:MaxHeapSize=4125097984 -XX:MaxNewSize=1374683136 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=85983232 -XX:OldSize=171966464 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC

VM Arguments:
jvm_args: -javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2020.2.3\lib\idea_rt.jar=57853:D:\Program Files\JetBrains\IntelliJ IDEA 2020.2.3\bin -Dfile.encoding=UTF-8
java_command: com.cpucode.java.heap.HeapInstanceTest
java_class_path (initial): D:\Program Files\Java\jdk8u272-b10\jre\lib\charsets.jar;D:\Program Files\Java\jdk8u272-b10\jre\lib\ext\access-bridge-64.jar;D:\Program Files\Java\jdk8u272-b10\jre\lib\ext\cldrdata.jar;D:\Program Files\Java\jdk8u272-b10\jre\lib\ext\dnsns.jar;D:\Program Files\Java\jdk8u272-b10\jre\lib\ext\jaccess.jar;D:\Program Files\Java\jdk8u272-b10\jre\lib\ext\localedata.jar;D:\Program Files\Java\jdk8u272-b10\jre\lib\ext\nashorn.jar;D:\Program Files\Java\jdk8u272-b10\jre\lib\ext\sunec.jar;D:\Program Files\Java\jdk8u272-b10\jre\lib\ext\sunjce_provider.jar;D:\Program Files\Java\jdk8u272-b10\jre\lib\ext\sunmscapi.jar;D:\Program Files\Java\jdk8u272-b10\jre\lib\ext\sunpkcs11.jar;D:\Program Files\Java\jdk8u272-b10\jre\lib\ext\zipfs.jar;D:\Program Files\Java\jdk8u272-b10\jre\lib\jce.jar;D:\Program Files\Java\jdk8u272-b10\jre\lib\jfr.jar;D:\Program Files\Java\jdk8u272-b10\jre\lib\jsse.jar;D:\Program Files\Java\jdk8u272-b10\jre\lib\management-agent.jar;D:\Program Files\Java\jdk8u272-b10\jre\lib\resources.jar;D:\Program Files\Java\jdk8u272-b10\jre\lib\rt.jar;D:\Date\github\java\out\production\JVM;D:\Program Files\JetBrains\IntelliJ IDEA 2020.2.3\lib\idea_rt.jar
Launcher Type: SUN_STANDARD
           
JVM調試常用指令指令 jps jstat jinfo jmap jhat jstackJVM調試指令

jmap: Java記憶體映像工具

jmap( Memory Map for Java) : 生成堆轉儲快照( 一般稱為heapdump 或 dump 檔案)

jhat: 虛拟機堆轉儲快照分析工具

jhat( JVM Heap Analysis Tool) 指令與jmap搭配使用, 來分析jmap生成的堆轉儲快照。

jhat内置了一個微型的HTTP/Web伺服器, 生成堆轉儲快照的分析結果後, 可以在浏覽器中檢視

jstack: Java堆棧跟蹤工具

jstack( Stack Trace for Java) : 生成虛拟機目前時刻的線程快照( 一般稱為 threaddump 或者 javacore檔案)