JVM调试工具合集

  1. JMeter

是一款apache旗下的压力测试工具,是apache bench(简称AB)的替代品。与ab相比的优势:

  • ab是单线程的。

  • 而JMeter的功能更强大,并且支持可视化。

下载地址:https://jmeter.apache.org/download_jmeter.cgi

  1. jps

查看java进程的id

xiaosa@XIAOSAdeMBP ~ % jps
641 
98674 Launcher
32614 Elasticsearch
10860 Jps
15420 Elasticsearch
  1. jstat

Java Virtual Machine statistics monitoring tool,JVM统计监控工具。

#查看所有可以支持的参数
xiaosa@XIAOSAdeMBP ~ % jstat  -options --help
-class #class loader的行为统计。Statistics on the behavior of the class loader.
-compiler #HotSpt JIT编译器行为统计。Statistics of the behavior of the HotSpot Just-in-Time compiler.
-gc #垃圾回收堆的行为统计。Statistics of the behavior of the garbage collected heap.-gccapacity 
-gccause #垃圾收集统计概述(同-gcutil),附加最近两次垃圾回收事件的原因。Summary of garbage collection statistics (same as -gcutil), with the cause of the last and
-gcmetacapacity #各个垃圾回收代容量(young,old,perm)和他们相应的空间统计。Statistics of the capacities of the generations and their corresponding spaces.
-gcnew #新生代行为统计。Statistics of the behavior of the new generation.
-gcnewcapacity #新生代与其相应的内存空间的统计。Statistics of the sizes of the new generations and its corresponding spaces.
-gcold #年老代和永生代行为统计。Statistics of the behavior of the old and permanent generations.
-gcoldcapacity #年老代行为统计。Statistics of the sizes of the old generation.
-gcutil #垃圾回收统计概述。Summary of garbage collection statistics.
-printcompilation #HotSpot编译方法统计。HotSpot compilation method statistics.
xiaosa@XIAOSAdeMBP ~ % jstat -class 32614
Loaded  Bytes  Unloaded  Bytes     Time   
 10410 19146.1        0     0.0       1.13
xiaosa@XIAOSAdeMBP ~ % jstat -compiler 32614
Compiled Failed Invalid   Time   FailedType FailedMethod
    6288      0       0    11.69          0  
xiaosa@XIAOSAdeMBP ~ % jstat -gc 32614              
    S0C         S1C         S0U         S1U          EC           EU           OC           OU          MC         MU       CCSC      CCSU     YGC     YGCT     FGC    FGCT     CGC    CGCT       GCT   
      0.0     18432.0         0.0     18421.0     642048.0     340992.0     388096.0     180610.5    45952.0    45341.4    6336.0    6067.5     13     0.372     0     0.000     4     0.002     0.374
xiaosa@XIAOSAdeMBP ~ % jstat -gccause 32614   
  S0     S1     E      O      M     CCS    YGC     YGCT     FGC    FGCT     CGC    CGCT       GCT    LGCC                 GCC                 
  0.00  99.94  62.36  46.54  98.67  95.76     13     0.372     0     0.000     4     0.002     0.374 G1 Evacuation Pause  No GC  
xiaosa@XIAOSAdeMBP ~ % jstat -gcmetacapacity 32614
   MCMN       MCMX        MC       CCSMN     CCSMX     CCSC     YGC    FGC    FGCT     CGC    CGCT       GCT   
       0.0  1089536.0    45952.0       0.0 1048576.0    6336.0     13     0     0.000     4     0.002     0.374
xiaosa@XIAOSAdeMBP ~ % jstat -gcnew 32614         
    S0C         S1C         S0U         S1U     TT MTT     DSS          EC           EU       YGC     YGCT   
        0.0     18432.0         0.0     18421.0 15  15     39424.0     642048.0     405504.0     13     0.372
xiaosa@XIAOSAdeMBP ~ % jstat -gcnewcapacity 32614
   NGCMN        NGCMX         NGC         S0CMX        S0C        S1CMX        S1C         ECMX          EC       YGC    FGC   CGC 
         0.0    1048576.0     660480.0         0.0         0.0   1048576.0     18432.0    1048576.0     642048.0     13     0     4
xiaosa@XIAOSAdeMBP ~ % jstat -gcold 32614        
    MC         MU       CCSC      CCSU         OC           OU       YGC    FGC    FGCT     CGC    CGCT       GCT   
   45952.0    45341.4    6336.0    6067.5     388096.0     180610.5     13     0     0.000     4     0.002     0.374
xiaosa@XIAOSAdeMBP ~ % jstat -gcoldcapacity 32614
   OGCMN        OGCMX         OGC           OC       YGC    FGC    FGCT     CGC    CGCT       GCT   
         0.0    1048576.0     388096.0     388096.0     13     0     0.000     4     0.002     0.374
xiaosa@XIAOSAdeMBP ~ % jstat -gcutil 32614       
  S0     S1     E      O      M     CCS    YGC     YGCT     FGC    FGCT     CGC    CGCT       GCT   
  0.00  99.94  64.59  46.54  98.67  95.76     13     0.372     0     0.000     4     0.002     0.374
xiaosa@XIAOSAdeMBP ~ % jstat -printcompilation 32614
Compiled  Size  Type Method
    6293    458    1 org/elasticsearch/action/support/broadcast/node/TransportBroadcastByNodeAction$BroadcastByNodeTransportRequestHandler onShardOperation

jcmd查看堆信息

xiaosa@XIAOSAdeMBP ~ % jcmd 32614 GC.heap_info
32614:
 garbage-first heap   total 1048576K, used 703863K [0x00000007c0000000, 0x0000000800000000)
  region size 1024K, 511 young (523264K), 18 survivors (18432K)
 Metaspace       used 45354K, committed 46016K, reserved 1089536K
  class space    used 6067K, committed 6336K, reserved 1048576K
xiaosa@XIAOSAdeMBP ~ % jcmd 32614 GC.heap_info -h

Metaspace 与class space属于堆外内存,reserved,表示向操作系统预定的内存,操作系统不一定会分配,可以reserved很多内存。committed,操作系统实际映射的物理内存。操作系统在给应用分陪内存时都是以虚拟内存的形式进行分配。

java 启动参数配置的-Xmx -Xms向操作系统申请时需要真正的物理内存,需要committed状态的内存。

  1. jmap

Java Memory Map,打印JVM堆内详细信息。

xiaosa@XIAOSAdeMBP ~ % jmap --help
Usage:
    jmap -clstats <pid>
        to connect to running process and print class loader statistics
    jmap -finalizerinfo <pid>
        to connect to running process and print information on objects awaiting finalization
    jmap -histo[:[<histo-options>]] <pid>
        to connect to running process and print histogram of java object heap
    jmap -dump:<dump-options> <pid>
        to connect to running process and dump java heap
    jmap -? -h --help
        to print this help message

    dump-options:
      live         dump only live objects (takes precedence if both "live" and "all" are specified)
      all          dump all objects in the heap (default if one of "live" or "all" is not specified)
      format=b     binary format
      file=<file>  dump heap to <file>
      gz=<number>  If specified, the heap dump is written in gzipped format using the given compression level.
                   1 (recommended) is the fastest, 9 the strongest compression.

    Example: jmap -dump:live,format=b,file=heap.bin <pid>

    histo-options:
      live                count only live objects (takes precedence if both "live" and "all" are specified)
      all                 count all objects in the heap (default if one of "live" or "all" is not specified)
      file=<file>         dump data to <file>
      parallel=<number>   Number of parallel threads to use for heap inspection:
                          0 (the default) means let the VM determine the number of threads to use
                          1 means use one thread (disable parallelism).
                          For any other value the VM will try to use the specified number of threads, but might use fewer.

    Example: jmap -histo:live,file=/tmp/histo.data <pid>

jmap -dump:live,format=b,file=heap.bin <pid>

dump堆信息,live表示存活的对象,格式为二进制,文件名称为heap.bin,dump操作非常危险,线上系统慎用。

xiaosa@XIAOSAdeMBP ~ % jmap -dump:live,format=b,file=heap.bin 32614
Dumping heap to /Users/xiaosa/heap.bin ...
Heap dump file created [211288055 bytes in 0.189 secs]

常用jhat去分析dump下来的二进制文件,也就是上面的heap.bin文件。jhat heap.bin会启动一个web server去可视化的分析堆内存情况。

  1. jinfo

查看与修改虚拟机的配置。

xiaosa@XIAOSAdeMBP ~ % jinfo 32614
Java System Properties:
#Fri Mar 03 01:13:42 CST 2023
es.path.home=/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1
java.specification.version=17
es.logs.cluster_name=my_cluster
sun.jnu.encoding=UTF-8
java.class.path=/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/lucene-sandbox-7.1.0.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/lucene-misc-7.1.0.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/lucene-backward-codecs-7.1.0.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/lucene-grouping-7.1.0.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/lucene-memory-7.1.0.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/jopt-simple-5.0.2.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/securesm-1.2.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/log4j-api-2.9.1.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/jackson-dataformat-yaml-2.8.10.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/log4j-1.2-api-2.9.1.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/plugin-cli-6.1.1.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/lucene-core-7.1.0.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/elasticsearch-6.1.1.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/snakeyaml-1.17.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/lucene-queries-7.1.0.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/lucene-suggest-7.1.0.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/jackson-dataformat-smile-2.8.10.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/t-digest-3.0.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/lucene-analyzers-common-7.1.0.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/spatial4j-0.6.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/jna-4.4.0-1.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/hppc-0.7.1.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/lucene-spatial3d-7.1.0.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/log4j-core-2.9.1.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/lucene-highlighter-7.1.0.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/lucene-join-7.1.0.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/jackson-dataformat-cbor-2.8.10.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/HdrHistogram-2.1.9.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/joda-time-2.9.5.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/lucene-spatial-extras-7.1.0.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/lucene-spatial-7.1.0.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/java-version-checker-6.1.1.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/jackson-core-2.8.10.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/jts-1.13.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/elasticsearch-cli-6.1.1.jar\:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/lucene-queryparser-7.1.0.jar
java.vm.vendor=Oracle Corporation
io.netty.recycler.maxCapacityPerThread=0
log4j.shutdownHookEnabled=false
sun.arch.data.model=64
java.vendor.url=https\://java.oracle.com/
user.timezone=Asia/Shanghai
os.name=Mac OS X
java.vm.specification.version=17
sun.java.launcher=SUN_STANDARD
user.country=CN
sun.boot.library.path=/Users/xiaosa/dev_tools/jdk-17.0.4.1.jdk/Contents/Home/lib
sun.java.command=org.elasticsearch.bootstrap.Elasticsearch -Ecluster.name\=my_cluster -Epath.data\=my_cluster_node2 -Enode.name\=node2 -Ehttp.port\=5300 -d
jdk.debug=release
sun.cpu.endian=little
user.home=/Users/xiaosa
user.language=zh
sun.stderr.encoding=UTF-8
io.netty.noKeySetOptimization=true
java.specification.vendor=Oracle Corporation
java.version.date=2022-08-18
java.home=/Users/xiaosa/dev_tools/jdk-17.0.4.1.jdk/Contents/Home
file.separator=/
java.vm.compressedOopsMode=Zero based
line.separator=\n
sun.stdout.encoding=UTF-8
java.vm.specification.vendor=Oracle Corporation
java.specification.name=Java Platform API Specification
java.awt.headless=true
user.script=Hans
es.path.conf=/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/config
sun.management.compiler=HotSpot 64-Bit Tiered Compilers
io.netty.noUnsafe=true
java.runtime.version=17.0.4.1+1-LTS-2
user.name=xiaosa
path.separator=\:
jna.nosys=true
os.version=13.0
java.runtime.name=Java(TM) SE Runtime Environment
file.encoding=UTF-8
jnidispatch.path=/var/folders/kz/xsqg21v97k31z9fd6s3ts4sh0000gn/T/jna--759499411/jna5145021117089107982.tmp
sun.nio.ch.bugLevel=
java.vm.name=Java HotSpot(TM) 64-Bit Server VM
java.vendor.url.bug=https\://bugreport.java.com/bugreport/
java.io.tmpdir=/var/folders/kz/xsqg21v97k31z9fd6s3ts4sh0000gn/T/
java.version=17.0.4.1
user.dir=/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/bin
os.arch=aarch64
java.vm.specification.name=Java Virtual Machine Specification
es.logs.node_name=node2
es.logs.base_path=/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/logs
native.encoding=UTF-8
java.library.path=/Users/xiaosa/Library/Java/Extensions\:/Library/Java/Extensions\:/Network/Library/Java/Extensions\:/System/Library/Java/Extensions\:/usr/lib/java\:.
java.vendor=Oracle Corporation
java.vm.info=mixed mode, sharing
java.vm.version=17.0.4.1+1-LTS-2
sun.io.unicode.encoding=UnicodeBig
log4j2.disable.jmx=true
java.class.version=61.0

VM Flags:
-XX:+AlwaysPreTouch -XX:CICompilerCount=4 -XX:ConcGCThreads=2 -XX:G1ConcRefinementThreads=9 -XX:G1EagerReclaimRemSetThreshold=8 -XX:G1HeapRegionSize=1048576 -XX:GCDrainStackTargetSize=64 -XX:+HeapDumpOnOutOfMemoryError -XX:InitialHeapSize=1073741824 -XX:MarkStackSize=4194304 -XX:MaxHeapSize=1073741824 -XX:MaxNewSize=643825664 -XX:MinHeapDeltaBytes=1048576 -XX:MinHeapSize=1073741824 -XX:NonNMethodCodeHeapSize=5839564 -XX:NonProfiledCodeHeapSize=122909338 -XX:-OmitStackTraceInFastThrow -XX:ProfiledCodeHeapSize=122909338 -XX:ReservedCodeCacheSize=251658240 -XX:+SegmentedCodeCache -XX:SoftMaxHeapSize=1073741824 -XX:ThreadStackSize=1024 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseG1GC -XX:-UseNUMA -XX:-UseNUMAInterleaving 

VM Arguments:
jvm_args: -Xms1g -Xmx1g -XX:+AlwaysPreTouch -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -XX:-OmitStackTraceInFastThrow -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -XX:+HeapDumpOnOutOfMemoryError -Des.path.home=/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1 -Des.path.conf=/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/config 
java_command: org.elasticsearch.bootstrap.Elasticsearch -Ecluster.name=my_cluster -Epath.data=my_cluster_node2 -Enode.name=node2 -Ehttp.port=5300 -d
java_class_path (initial): /Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/lucene-sandbox-7.1.0.jar:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/lucene-misc-7.1.0.jar:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/lucene-backward-codecs-7.1.0.jar:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/lucene-grouping-7.1.0.jar:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/lucene-memory-7.1.0.jar:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/jopt-simple-5.0.2.jar:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/securesm-1.2.jar:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/log4j-api-2.9.1.jar:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/jackson-dataformat-yaml-2.8.10.jar:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/log4j-1.2-api-2.9.1.jar:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/plugin-cli-6.1.1.jar:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/lucene-core-7.1.0.jar:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/elasticsearch-6.1.1.jar:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/snakeyaml-1.17.jar:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/lucene-queries-7.1.0.jar:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/lucene-suggest-7.1.0.jar:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/jackson-dataformat-smile-2.8.10.jar:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/t-digest-3.0.jar:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/lucene-analyzers-common-7.1.0.jar:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/spatial4j-0.6.jar:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/jna-4.4.0-1.jar:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/hppc-0.7.1.jar:/Users/xiaosa/learning/elastic_search/elasticsearch-6.1.1/lib/lucene-spatial3d-7.1.0.ja
Launcher Type: SUN_STANDARD
  1. jhat

与jmap的dump文件联合使用

  1. jstack

查看所有线程的堆栈信息。

jstack + pid

  1. jconsole

可以可视化的去查看java虚拟机的整体情况,jconsole + pid。

选择需要链接的java进程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值