美文网首页
JVM 常用的命令行工具

JVM 常用的命令行工具

作者: 扎Zn了老Fe | 来源:发表于2019-03-18 18:30 被阅读0次

命令基于Sun JDK,用于监控和诊断HotSpot的java 虚拟机

1. jps 虚拟机进程状况工具

格式:jps [-q] [-mlvV] [<hostid>]
解释

   -l        输出主类全名。如果进程执行的是jar包,则输出包名。
   -q        只输出LVMID,同进程pid
   -m        输出JVM启动时传给主类main()的参数。
   -v        输出JVM启动时JVM参数。
   -V        输出通过标记的文件传递给JVM的参数(.hotspotrc文件,或者是通过参数-XX:Flags=指定的文件)

示例

bogon:~ hzjdemac$ jps
4081 org.eclipse.equinox.launcher_1.5.100.v20180827-1352.jar
14356 Launcher
14357 OutOfMemoryTest
14391 Jps
1290
12619 SSHMain
3453 RemoteMavenServer
bogon:~ hzjdemac$ jps -l
4081 /Users/hzjdemac/.vscode/extensions/redhat.java-0.30.0/server/plugins/org.eclipse.equinox.launcher_1.5.100.v20180827-1352.jar
14356 org.jetbrains.jps.cmdline.Launcher
14357 chapter2.OutOfMemoryTest
1290
14394 sun.tools.jps.Jps
12619 org.jetbrains.git4idea.ssh.SSHMain
3453 org.jetbrains.idea.maven.server.RemoteMavenServer
bogon:~ hzjdemac$ jps -v
4081 org.eclipse.equinox.launcher_1.5.100.v20180827-1352.jar -Declipse.application=org.eclipse.jdt.ls.core.id1 -Dosgi.bundles.defaultStartLevel=4 -Declipse.product=org.eclipse.jdt.ls.core.product -Xverify:none -Xmx1G -XX:+UseG1GC -XX:+UseStringDeduplication
14356 Launcher -Xmx700m -Djava.awt.headless=true -Djava.endorsed.dirs="" -Djdt.compiler.useSingleThread=true -Dpreload.project.path=/Users/hzjdemac/IdeaProjects/java-learning -Dpreload.config.path=/Users/hzjdemac/Library/Preferences/IntelliJIdea2017.3/options -Dcompile.parallel=false -Drebuild.on.dependency.change=true -Djava.net.preferIPv4Stack=true -Dio.netty.initialSeedUniquifier=-8492196048993142940 -Dfile.encoding=UTF-8 -Duser.language=zh -Duser.country=CN -Didea.paths.selector=IntelliJIdea2017.3 -Didea.home.path=/Applications/IntelliJ IDEA.app/Contents -Didea.config.path=/Users/hzjdemac/Library/Preferences/IntelliJIdea2017.3 -Didea.plugins.path=/Users/hzjdemac/Library/Application Support/IntelliJIdea2017.3 -Djps.log.dir=/Users/hzjdemac/Library/Logs/IntelliJIdea2017.3/build-log -Djps.fallback.jdk.home=/Applications/IntelliJ IDEA.app/Contents/jdk/Contents/Home/jre -Djps.fallback.jdk.version=1.8.0_152-release -Dio.netty.noUnsafe=true -Djava.io.tmpdir=/Users/hzjdemac/Library/Caches/IntelliJIdea2017.3/compile-server/java-l
1290  -Xms1024m -Xmx2048m -XX:ReservedCodeCacheSize=240m -XX:+UseCompressedOops -Dfile.encoding=UTF-8 -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Xverify:none -XX:ErrorFile=/Users/hzjdemac/java_error_in_idea_%p.log -XX:HeapDumpPath=/Users/hzjdemac/java_error_in_idea.hprof -Xbootclasspath/a:../lib/boot.jar -Djb.vmOptionsFile=/Applications/IntelliJ IDEA.app/Contents/bin/idea.vmoptions -Xbootclasspath/a:/Applications/IntelliJ IDEA.app/Contents/lib/boot.jar -Didea.java.redist=jdk-bundled -Didea.home.path=/Applications/IntelliJ IDEA.app/Contents -Didea.executable=idea -Didea.paths.selector=IntelliJIdea2017.3
12619 SSHMain
14397 Jps -Dapplication.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home -Xms8m
3453 RemoteMavenServer -Djava.awt.headless=true -Didea.version==2017.3.1 -Xmx768m -Didea.maven.embedder.version=3.3.9 -Dfile.encoding=UTF-8

2. jinfo 实时地查看和调整虚拟机各项参数

格式:

bogon:~ hzjdemac$ jinfo -help
Usage:
    jinfo [option] <pid>
        (to connect to running process)
    jinfo [option] <executable <core>
        (to connect to a core file)
    jinfo [option] [server_id@]<remote server IP or hostname>
        (to connect to remote debug server)

where <option> is one of:
    -flag <name>         to print the value of the named VM flag// 打印给定name对应的命令行参数值。
    -flag [+|-]<name>    to enable or disable the named VM flag //更改boolean类型的命令行参数值
    -flag <name>=<value> to set the named VM flag to the given value //更改name对应的命令行参数值为value。
    -flags               to print VM flags          //打印传给JVM的命令参数值
    -sysprops            to print Java system properties  //打印系统属性值
    <no option>          to print both of the above
    -h | -help           to print this help message

示例

bogon:~ hzjdemac$ jinfo -flags 15612
Attaching to process ID 15612, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.101-b13
Non-default VM flags: -XX:CICompilerCount=4 -XX:+HeapDumpOnOutOfMemoryError -XX:InitialHeapSize=83886080 -XX:MaxHeapSize=83886080 -XX:MaxNewSize=27787264 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=27787264 -XX:OldSize=56098816 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC
Command line:  -Xms80m -Xmx80m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

3. jstat 虚拟机统计信息监视工具

bogon:~ hzjdemac$ jstat -help
Usage: jstat -help|-options
       jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

Definitions:
  <option>      An option reported by the -options option
  <vmid>        Virtual Machine Identifier. A vmid takes the following form:
                     <lvmid>[@<hostname>[:<port>]]
                Where <lvmid> is the local vm identifier for the target
                Java virtual machine, typically a process id; <hostname> is
                the name of the host running the target Java virtual machine;
                and <port> is the port number for the rmiregistry on the
                target host. See the jvmstat documentation for a more complete
                description of the Virtual Machine Identifier.
  <lines>       Number of samples between header lines.
  <interval>    Sampling interval. The following forms are allowed:
                    <n>["ms"|"s"]
                Where <n> is an integer and the suffix specifies the units as
                milliseconds("ms") or seconds("s"). The default units are "ms".
  <count>       Number of samples to take before terminating.
  -J<flag>      Pass <flag> directly to the runtime system.
bogon:~ hzjdemac$ jstat -options
-class          //监视类装载、卸载数量、总空间以及类装载所耗费的时间.
-compiler       //显示编译器编译过的方法、耗时等信息.
-gc             //显示Java堆状况、包括Eden区、两个survivor区、老年代、永久代等的容量、已用空间、GC次数以及时间等信息.
-gccapacity     //显示VM内存中三代(young,old,perm)对象的使用和占用大小
-gcutil         //gc统计信息, 输出主要关注已使用空间占总弓箭的百分比
-gccause        //与-gcutil基本相同, 会额外输出导致上一次GC产生的原因
-gcnew          //显示新生代GC状况
-gcnewcapacity  //显示内容与-gcnew相同,输出主要关注使用到的最大最小空间
-gcold          // 显示老年代GC状况
-gcoldcapacity  //显示内容与-gcold相同,输出主要关注使用到的最大最小空间
-printcompilation //当前vm执行的信息

示例

bogon:~ hzjdemac$ jstat -gc 16229 2000   5   //每2s执行一次查询统计,执行5次gc统计输出
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
10752.0 10752.0  0.0    0.0   65536.0   3932.6   175104.0     0.0     4480.0 774.0  384.0   75.8       0    0.000   0      0.000    0.000
10752.0 10752.0  0.0    0.0   65536.0   3932.6   175104.0     0.0     4480.0 774.0  384.0   75.8       0    0.000   0      0.000    0.000
10752.0 10752.0  0.0    0.0   65536.0   3932.6   175104.0     0.0     4480.0 774.0  384.0   75.8       0    0.000   0      0.000    0.000
10752.0 10752.0  0.0    0.0   65536.0   3932.6   175104.0     0.0     4480.0 774.0  384.0   75.8       0    0.000   0      0.000    0.000
10752.0 10752.0  0.0    0.0   65536.0   3932.6   175104.0     0.0     4480.0 774.0  384.0   75.8       0    0.000   0      0.000    0.000
bogon:~ hzjdemac$ jstat -class 16229
Loaded  Bytes  Unloaded  Bytes     Time
   421   868.0        0     0.0       0.05

S0C: 新生代中Survivor space 0区总空间
S1C: 新生代中Survivor space 1区总空间
S0U:新生代中Survivor space 0区已使用空间
S1U:新生代中Survivor space 1区已使用空间
EC: 新生代中总空间
EU:新生代已使用空间
OC: 老年代总空间
OU:老年代中已使用空间
MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
YGC: 从应用程序启动到当前,发生Yang GC 的次数
YGCT: 从应用程序启动到当前,Yang GC所用的时间【单位秒】
FGC: 从应用程序启动到当前,发生Full GC的次数
FGCT: 从应用程序启动到当前,Full GC所用的时间
GCT: 从应用程序启动到当前,用于垃圾回收的总时间【单位秒】

4. jmap 打印指定Java进程(或核心文件、远程调试服务器)的共享对象内存映射或堆内存细节

bogon:~ hzjdemac$ jmap -help
Usage:
    jmap [option] <pid>
        (to connect to running process)
    jmap [option] <executable <core>
        (to connect to a core file)
    jmap [option] [server_id@]<remote server IP or hostname>
        (to connect to remote debug server)

where <option> is one of:
    <none>               to print same info as Solaris pmap
    -heap                to print java heap summary   //打印jvm heap的情况,例如GC收集器,参数配置,JVM内存分区情况
    -histo[:live]        to print histogram of java object heap; if the "live"
                         suboption is specified, only count live objects  //打印jvm heap的直方图。其输出信息包括类名,对象数量,对象占用大小
    -clstats             to print class loader statistics
    -finalizerinfo       to print information on objects awaiting finalization
    -dump:<dump-options> to dump java heap in hprof binary format
                         dump-options:
                           live         dump only live objects; if not specified,
                                        all objects in the heap are dumped.
                           format=b     binary format
                           file=<file>  dump heap to <file>
                         Example: jmap -dump:live,format=b,file=heap.bin <pid>
    -F                   force. Use with -dump:<dump-options> <pid> or -histo
                         to force a heap dump or histogram when <pid> does not
                         respond. The "live" suboption is not supported
                         in this mode.
    -h | -help           to print this help message
    -J<flag>             to pass <flag> directly to the runtime system

示例

bogon:~ hzjdemac$ jmap -heap 16229
Attaching to process ID 16229, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.101-b13

using thread-local object allocation.
Parallel GC with 8 thread(s)

Heap Configuration:   //#堆内存初始化配置
   MinHeapFreeRatio         = 0  //-XX:MinHeapFreeRatio设置JVM堆最小空闲比率  
   MaxHeapFreeRatio         = 100   //-XX:MaxHeapFreeRatio设置JVM堆最大空闲比率 
   MaxHeapSize              = 4294967296 (4096.0MB)  //-XX:MaxHeapSize=设置JVM堆的最大大小
   NewSize                  = 89128960 (85.0MB)   //-XX:NewSize=设置JVM堆新生代的默认大小
   MaxNewSize               = 1431306240 (1365.0MB)  //-XX:MaxNewSize=设置JVM堆的‘新生代’的最大大小
   OldSize                  = 179306496 (171.0MB)  //-XX:OldSize=设置JVM堆的‘老生代’的大小
   NewRatio                 = 2     //#-XX:NewRatio=:‘新生代’和‘老生代’的大小比率
   SurvivorRatio            = 8   //-XX:SurvivorRatio=设置年轻代中Eden区与Survivor区的大小比值
   MetaspaceSize            = 21807104 (20.796875MB)  //-XX:PermSize=<value>:设置JVM堆的‘持久代’的初始大小  
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 67108864 (64.0MB)
   used     = 4026944 (3.84039306640625MB)
   free     = 63081920 (60.15960693359375MB)
   6.000614166259766% used
From Space:
   capacity = 11010048 (10.5MB)
   used     = 0 (0.0MB)
   free     = 11010048 (10.5MB)
   0.0% used
To Space:
   capacity = 11010048 (10.5MB)
   used     = 0 (0.0MB)
   free     = 11010048 (10.5MB)
   0.0% used
PS Old Generation
   capacity = 179306496 (171.0MB)
   used     = 0 (0.0MB)
   free     = 179306496 (171.0MB)
   0.0% used

758 interned Strings occupying 50832 bytes.
bogon:~ hzjdemac$ jmap -histo 16229

 num     #instances         #bytes  class name
----------------------------------------------
   1:           439        4642832  [I
   2:          2553         347560  [C
   3:           731         145760  [B
   4:           487          55504  java.lang.Class
   5:          1699          40776  java.lang.String
   6:           584          30504  [Ljava.lang.Object;
   7:           115           8280  java.lang.reflect.Field
   8:           199           6368  java.io.File
   9:           238           5712  java.lang.StringBuilder
  10:            89           5696  java.net.URL
  11:            11           4136  java.lang.Thread
  12:           258           4128  java.lang.Integer
  13:            98           3920  java.lang.ref.SoftReference
  14:           122           3904  java.util.Hashtable$Entry
...
bogon:~ hzjdemac$ jmap  -dump:format=b,file=a.log 16229   //保存快照
Dumping heap to /Users/hzjdemac/a.log ...
Heap dump file created

配置JVM启动参数,让JVM在遇到OutOfMemoryError时自动生成Dump文件

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path

5. jstack 堆栈跟踪工具

bogon:~ hzjdemac$ jstack -help
Usage:
    jstack [-l] <pid>
        (to connect to running process)
    jstack -F [-m] [-l] <pid>
        (to connect to a hung process)
    jstack [-m] [-l] <executable> <core>
        (to connect to a core file)
    jstack [-m] [-l] [server_id@]<remote server IP or hostname>
        (to connect to a remote debug server)

Options:
    -F  to force a thread dump. Use when jstack <pid> does not respond (process is hung)
    -m  to print both java and native frames (mixed mode)
    -l  long listing. Prints additional information about locks
    -h or -help to print this help message

示例

bogon:~ hzjdemac$ jstack 16229
2019-03-18 18:27:04
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.101-b13 mixed mode):

"Attach Listener" #13 daemon prio=9 os_prio=31 tid=0x00007fa6c5001000 nid=0xc07 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"DestroyJavaVM" #12 prio=5 os_prio=31 tid=0x00007fa6c589f000 nid=0x1803 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Thread-1" #11 prio=5 os_prio=31 tid=0x00007fa6c589e000 nid=0x5603 waiting for monitor entry [0x000070000c031000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at chapter1.DeadLockDemo$2.run(DeadLockDemo.java:38)
    - waiting to lock <0x000000076abaccd8> (a java.lang.String)
    - locked <0x000000076abacd08> (a java.lang.String)
    at java.lang.Thread.run(Thread.java:745)

"Thread-0" #10 prio=5 os_prio=31 tid=0x00007fa6c589d800 nid=0xa903 waiting for monitor entry [0x000070000bf2e000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at chapter1.DeadLockDemo$1.run(DeadLockDemo.java:28)
    - waiting to lock <0x000000076abacd08> (a java.lang.String)
    - locked <0x000000076abaccd8> (a java.lang.String)
    at java.lang.Thread.run(Thread.java:745)
...

参考:
[1].https://www.cnblogs.com/dennisit/p/9119535.html
[2]. 深入理解Java虚拟机

相关文章

  • Java常用命令行工具

    常用的Java命令行工具的使用梳理,方便以后线上问题排查处理. 示例使用的虚拟机版本(JVM自带命令行工具在bin...

  • jvm监控与调优之jdk命令行工具

    jvm监控与调优之jdk命令行工具 目录 jvm监控与调优之jdk命令行工具jvm的参数类型标准参数X参数XX参数...

  • JVM 常用的命令行工具

    命令基于Sun JDK,用于监控和诊断HotSpot的java 虚拟机 1. jps 虚拟机进程状况工具 格式:j...

  • JVM | 命令行工具

    jvm命令行工具 1. jmap 虚拟机工具-jmap 2. jstate jstat命令查看jvm的GC情况 (...

  • 第四章 虚拟机性能监控与故障处理工具 

    JDK的命令行工具 jps:虚拟机进程状况工具[JVM Process Status Tool] jstat:虚拟...

  • 通过jdk工具jps、jstack排查Java中的死锁问题

    jdk命令行工具系列 (1) - jps:虚拟机进程状态工具(2) - jinfo:jvm配置信息工具(3) - ...

  • JVM命令与调试工具

    JVM常用命令行命令 jps命令:查看系统中有哪些进程使用jvm虚拟机 扩展参数:jps -l;jps -mlv;...

  • 服务器JVM等查看

    常用 JVM性能调优监控工具JDK内置工具使用JAVA线程dump分析JVM致命错误日志1 . CPU的监控 cs...

  • JVM调优

    前言 本系列系统的介绍了jvm调优及相关工具的使用。笔者会先介绍jvm的基本概念,然后介绍常用命令、常用工具,最后...

  • iOS 开发工具

    一、iOS常用的工具 命令行工具:cocoapod 图形工具:Charles和Reveal 插件工具:Alcatr...

网友评论

      本文标题:JVM 常用的命令行工具

      本文链接:https://www.haomeiwen.com/subject/vbqbmqtx.html