是一款apache旗下的压力测试工具,是apache bench(简称AB)的替代品。与ab相比的优势:
ab是单线程的。
而JMeter的功能更强大,并且支持可视化。
下载地址:https://jmeter.apache.org/download_jmeter.cgi
查看java进程的id
xiaosa@XIAOSAdeMBP ~ % jps
641
98674 Launcher
32614 Elasticsearch
10860 Jps
15420 Elasticsearch
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状态的内存。
Java Memory Map,打印JVM堆内详细信息。
xiaosa@XIAOSAdeMBP ~ % jmap --help
Usage:
jmap -clstats
to connect to running process and print class loader statistics
jmap -finalizerinfo
to connect to running process and print information on objects awaiting finalization
jmap -histo[:[]]
to connect to running process and print histogram of java object heap
jmap -dump:
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= dump heap to
gz= 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
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= dump data to
parallel= 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
jmap -dump:live,format=b,file=heap.bin
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去可视化的分析堆内存情况。
查看与修改虚拟机的配置。
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
与jmap的dump文件联合使用
查看所有线程的堆栈信息。
jstack + pid
可以可视化的去查看java虚拟机的整体情况,jconsole + pid。
选择需要链接的java进程