天天看点

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文件)