名称 | 主要作用 |
---|---|
jps | JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程 |
jstat | JVM Statistics Monitoring Tool,用于收集HotSpot虚拟机各方面的运行数据 |
jinfo | Configuration Info For Java ,显示虚拟机配置信息 |
jmap | Memory map for java,生成虚拟机的内存转储快照(heapdump文件) |
jhat | JVM Heap Dump Browser,用与分析heapdump文件,它会建立一个http/HTML服务器,让用户可以在浏览器上面查看分析结果 |
jstack | Stack Trace For Java,显示虚拟机的线程快照 |
jstack命令用于生成虚拟机当前时刻的线程快照。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环等等吧。
选项 | 作用 |
---|---|
-F | 当整厂输出的请求不被响应时,强制输出线程堆栈 |
-l | 除栈外,显示关于锁的附加信息 |
-m | 如果调用到本地方法的话,可以显示c/c++的堆栈 |
[shankai@shankai Desktop]$ jstack -l 1617
2019-03-18 09:28:29
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.171-b11 mixed mode):
"Attach Listener" #72 daemon prio=9 os_prio=0 tid=0x00007f38e0001000 nid=0x87a waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
与jmap搭配使用,用来分析jmap生成的堆转储快照。
[shankai@shankai Desktop]$ jmap -dump:format=b,file=sk.bin 9176
Dumping heap to /home/shankai/Desktop/sk.bin ...
Heap dump file created
[shankai@shankai Desktop]$ head -n 1 sk.bin
JAVA PROFILE 1.0.i��1�-�X� Editor not initialized in addNotify()t�L��(Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlin/jvm/internal/Ref$ObjectRef;)VB�L��`(Lcom/siyeh/ig/controlflow/IfMayBeConditionalInspection;)VV�LωP(Lcom/siyeh/ig/controlflow/ConditionalCanBePushedInsideExpressionInspection;)V'�H|[email protected]�E�� calculateCrc�4~1pSmall Text�4E��findUrlAtCaret"�4 BATIK_EXT_COLOR_SWITCH_TAGK�D��(Ljava/security/spec/ECPoint;Ljava/security/spec/ECParameterSpec;)V���CRL_REASON��<�@UnixFileKey.java�D�%�JBuilder.xml3�D��(Ljava/lang/Iterable;)DI�D�X�(Ljava/io/InputStream;Ljava/nio/charset/Charset;)Ljava/io/Reader;H��"��(Ljava/lang/String;I[Ljava/lang/String;[Ljava/lang/String;[I[I)V���removeSizeHints5�HN���
jvm的内存区域,就是方法区什么的就是只有一套还是每个进程都有一套呢???
jinfo可以实时地查看和调整虚拟机的各项参数。
[shankai@shankai Desktop]$ jinfo -flag CMSInitiatingOccupancyFraction 9176
-XX:CMSInitiatingOccupancyFraction=-1
jstat是用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。
jstat option vmid interval count
jstat -gc 2764 250 20
每250ms查询一次进程2764的垃圾收集情况,一共查询20次。
选项 | 作用 |
---|---|
-class | 监视类装载和卸载数量、总空间以及类装载所耗费的时间 |
-gc | 监视java堆的状况,包括Eden区,两个survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息 |
-gccapacity | 监视内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大、最小空间 |
-gcutil | 监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比 |
-gccause | 与-gcutil的功能一样,但是会额外输出导致上一次GC的原因 |
-gcnew | 监视新生代gc情况 |
-gcnewcapacity | 监视内容与gcnew基本一样,但是主要关注使用到的最大最小空间 |
-gcold | 监视老年代gc情况 |
-gcoldcapacity | 监视内容与gcold基本一样,但是主要关注使用到的最大最小空间 |
-gcpermcapacity | 输出永久代使用的最大、最小空间 |
-compiler | 输出JIT编译器编译过的方法、耗时等信息 |
-printcompilation | 输出已经被JIT编译的方法 |
[shankai@shankai Desktop]$ jstat -gcutil 9176
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 100.00 96.90 85.21 95.54 93.85 35 0.495 9 0.106 0.601
新生代Eden区占用了96.9%的空间;
Suvivor0是空的
Survivor1占满;
老年代占用了85.21%的空间;
YGC表示发生了Minor GC 35次;
YGCT表示Minor GC的总耗时是0.495s;
FGC表示Full GC发生了9次;
FGCT表示Full GC的时间是0.106s;
GCT表示GC的时间是0.601s;
jps [options] [hostid]
[shankai@shankai Desktop]$ jps -l
4353 Solution68
7986 org.jetbrains.jps.cmdline.Launcher
8646 sun.tools.jps.Jps
1435 com.intellij.idea.Main
- -q 只输出LVMID,省略主类的名称
[shankai@shankai Desktop]$ jps -q
4353
7986
8715
1435
- -m 输出虚拟机进程启动是传递给主类main()函数的参数
[shankai@shankai Desktop]$ jps -m
4353 Solution68
7986 Launcher /usr/share/idea/lib/maven-model-builder-3.3.9.jar:/usr/share/idea/lib/jps-builders-6.jar:/usr/share/idea/lib/maven-aether-provider-3.3.9.jar:/usr/share/idea/lib/commons-codec-1.10.jar:/usr/share/idea/lib/maven-builder-support-3.3.9.jar:/usr/share/idea/lib/jdom.jar:/usr/share/idea/lib/guava-23.6-jre.jar:/usr/share/idea/lib/slf4j-api-1.7.25.jar:/usr/share/idea/lib/maven-model-3.3.9.jar:/usr/share/idea/lib/javac2.jar:/usr/share/idea/lib/httpcore-4.4.9.jar:/usr/share/idea/lib/aether-transport-file-1.1.0.jar:/usr/share/idea/lib/jps-model.jar:/usr/share/idea/lib/plexus-utils-3.0.22.jar:/usr/share/idea/lib/aether-util-1.1.0.jar:/usr/share/idea/lib/platform-api.jar:/usr/share/idea/lib/netty-resolver-4.1.25.Final.jar:/usr/share/idea/lib/netty-codec-4.1.25.Final.jar:/usr/share/idea/lib/aether-spi-1.1.0.jar:/usr/share/idea/lib/aether-impl-1.1.0.jar:/usr/share/idea/lib/commons-lang3-3.4.jar:/usr/share/idea/lib/forms_rt.jar:/usr/share/idea/lib/aether-connector-basic-1.1.0.jar:/usr/share/
8758 Jps -m
1435 Main
- -v 输出虚拟机进程启动时JVM参数
[shankai@shankai Desktop]$ jps -v
4353 Solution68 -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:40383,suspend=y,server=n -javaagent:/usr/share/idea/lib/rt/debugger-agent.jar=file:/tmp/capture.props -Dfile.encoding=UTF-8
7986 Launcher -Xmx700m -Djava.awt.headless=true -Djava.endorsed.dirs="" -Djdt.compiler.useSingleThread=true -Dpreload.project.path=/home/shankai/IdeaProjects/StrToInt -Dpreload.config.path=/home/shankai/.IdeaIC2018.2/config/options -Dcompile.parallel=false -Drebuild.on.dependency.change=true -Djava.net.preferIPv4Stack=true -Dio.netty.initialSeedUniquifier=-601983381367185574 -Dfile.encoding=UTF-8 -Duser.language=en -Duser.country=US -Didea.paths.selector=IdeaIC2018.2 -Didea.home.path=/usr/share/idea -Didea.config.path=/home/shankai/.IdeaIC2018.2/config -Didea.plugins.path=/home/shankai/.IdeaIC2018.2/config/plugins -Djps.log.dir=/home/shankai/.IdeaIC2018.2/system/log/build-log -Djps.fallback.jdk.home=/usr/java/jdk1.8.0_171 -Djps.fallback.jdk.version=1.8.0_171 -Dio.netty.noUnsafe=true -Djava.io.tmpdir=/home/shankai/.IdeaIC2018.2/system/compile-server/strtoint_b4d82c58/_temp_ -Djps.backward.ref.index.builder=true -Dkotlin.incremental.compilation=true -Dkotlin.daemon.enabled -Dkotlin.daemon.client.alive.path="/tmp/kotlin-idea-
8793 Jps -Dapplication.home=/usr/lib/jvm/java-8-openjdk -Xms8m
1435 Main -Xms128m -Xmx750m -XX:ReservedCodeCacheSize=240m -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -Djdk.http.auth.tunneling.disabledSchemes="" -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Dawt.useSystemAAFontSettings=on -Dsun.java2d.renderer=sun.java2d.marlin.MarlinRenderingEngine -XX:ErrorFile=/home/shankai/java_error_in_IDEA_%p.log -XX:HeapDumpPath=/home/shankai/java_error_in_IDEA.hprof -Didea.paths.selector=IdeaIC2018.2 -Djb.vmOptionsFile=/usr/share/idea/bin/idea64.vmoptions -Didea.platform.prefix=Idea -Didea.jre.check=true