JVM 命令参考 jps jstat jstack
Table of Contents
jps 显示出所有的 JAVA 进程以及 PID
显示出所有的 JAVA 进程以及 PID. 当未指定 hostid 时,默认查看本机jvm 进程,否者查看指定的hostid机器上的jvm进程,此时hostid所指机器必须开启jstatd服务。 jps 可以列出jvm进程lvmid,主类类名,main函数参数, jvm参数,jar名称等信息。
usage: jps [-help]
jps [-q] [-mlvV] [<hostid>]
Definitions:
<hostid>: <hostname>[:<port>]
参数
- -q 仅仅显示VM 标示,不显示jar,class, main参数等信息.
- -l 输出应用程序主类完整package名称或jar完整名称
- -v 显示出jvm参数
- -m 显示出传递给main函数的参数
- -V 输出通过.hotsportrc或-XX:Flags=指定的jvm参数
- hostid 指定特定主机,可以是ip地址和域名, 也可以指定具体协议,端口。
示例
# jps
93793
95554 Jps
93860 Application
95439 Application
527
95438 Launcher
# jps -q
93793
93860
95628
95439
527
95438
# jps -l
93793
93860 /Users/zhangyunan/Library/Application
95439 com.example.aries.Application
95678 sun.tools.jps.Jps
527
95438 org.jetbrains.jps.cmdline.Launcher
jps -lvmV
95793 sun.tools.jps.Jps -lvmV -Dapplication.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home -Xms8m
93793 -Xms128m -Xmx2000m -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 -XX:+UseCompressedOops -Dfile.encoding=UTF-8 -XX:ErrorFile=/Users/zhangyunan/java_error_in_idea_%p.log -XX:HeapDumpPath=/Users/zhangyunan/java_error_in_idea.hprof -Dide.no.platform.update=true -Didea.plugins.path=/Users/zhangyunan/Library/Application Support/JetBrains/Toolbox/apps/IDEA-C/ch-0/203.5981.155/IntelliJ IDEA CE.app.plugins -Djb.vmOptionsFile=/Users/zhangyunan/Library/Application Support/JetBrains/Toolbox/apps/IDEA-C/ch-0/203.5981.155/IntelliJ IDEA CE.app.vmoptions -Didea.paths.selector=IdeaIC2020.3 -Didea.executable=idea -Didea.platform.prefix=Idea -Didea.vendor.name=JetBrains -Didea.home.path=/Users/zhangyunan/Library/Applicat
93860 /Users/zhangyunan/Library/Application Support/JetBrains/Toolbox/apps/IDEA-C/ch-0/203.5981.155/IntelliJ IDEA CE.app.plugins/idea-spring-tools/lib/server/language-server.jar
95439 com.example.aries.Application -javaagent:/Users/zhangyunan/Library/Application Support/JetBrains/Toolbox/apps/IDEA-C/ch-0/203.5981.155/IntelliJ IDEA CE.app/Contents/lib/idea_rt.jar=64466:/Users/zhangyunan/Library/Application Support/JetBrains/Toolbox/apps/IDEA-C/ch-0/203.5981.155/IntelliJ IDEA CE.app/Contents/bin -Dfile.encoding=UTF-8
527 -Djava.library.path=/Applications/JetBrains Toolbox.app/Contents/MacOS/Contents -Duser.dir=/Applications/JetBrains Toolbox.app/Contents/MacOS -Xmx256m -Xms8m -Xss256k -XX:+UseStringDeduplication -XX:+UseCompressedOops -XX:+UseSerialGC -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true vfprintf exit abort -DTOOLBOX_VERSION=1.19.7784
95438 org.jetbrains.jps.cmdline.Launcher /Users/zhangyunan/Library/Application Support/JetBrains/Toolbox/apps/IDEA-C/ch-0/203.5981.155/IntelliJ IDEA CE.app/Contents/lib/jna-platform.jar:/Users/zhangyunan/Library/Application Support/JetBrains/Toolbox/apps/IDEA-C/ch-0/203.5981.155/IntelliJ IDEA CE.app/Contents/lib/jna.jar:/Users/zhangyunan/Library/Application Support/JetBrains/Toolbox/apps/IDEA-C/ch-0/203.5981.155/IntelliJ IDEA CE.app/Contents/lib/asm-all-9.0.jar:/Users/zhangyunan/Library/Application Support/JetBrains/Toolbox/apps/IDEA-C/ch-0/203.5981.155/IntelliJ IDEA CE.app/Contents/lib/maven-resolver-impl-1.3.3.jar:/Users/zhangyunan/Library/Application Support/JetBrains/Toolbox/apps/IDEA-C/ch-0/203.5981.155/IntelliJ IDEA CE.app/Contents/lib/guava-29.0-jre.jar:/Users/zhangyunan/Library/Application Support/JetBrains/Toolbox/apps/IDEA-C/ch-0/203.5981.155/IntelliJ IDEA CE.app/Contents/plugins/java/lib/jps-javac-extension-1.jar:/Users/zhangyunan/Library/Application Support/JetBrains/Toolbox/apps/IDEA-C/ch-0/203.5981.15 -Xmx700m -Djava.awt.headless=true -Djava.endorsed.dirs="" -Djdt.compiler.useSingleThread=true -Dpreload.project.path=/Users/zhangyunan/IdeaProjects/aries-java -Dpreload.config.path=/Users/zhangyunan/Library/Application Support/JetBrains/IdeaIC2020.3/options -Dcompile.parallel=false -Drebuild.on.dependency.change=true -Dio.netty.initialSeedUniquifier=2915071559679537949 -Dfile.encoding=UTF-8 -Duser.language=zh -Duser.country=CN -Didea.paths.selector=IdeaIC2020.3 -Didea.home.path=/Users/zhangyunan/Library/Application Support/JetBrains/Toolbox/apps/IDEA-C/ch-0/203.5981.155/IntelliJ IDEA CE.app/Contents -Didea.config.path=/Users/zhangyunan/Library/Application Support/JetBrains/IdeaIC2020.3 -Didea.plugins.path=/Users/zhangyunan/Library/Application Support/JetBrains/Toolbox/apps/IDEA-C/ch-0/203.5981.155/IntelliJ IDEA CE.app.plugins -Djps.log.dir=/Users/zhangyunan/Library/Logs/JetBrains/IdeaIC2020.3/build-log -Djps.fallback.jdk.home=/Users/zhangyunan/Library/Application Support/JetBrains/Toolbox/apps/IDEA-C/ch-0/203
jstat 查看堆内存各部分的使用量,以及加载类的数量
Usage: jstat -help|-options
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]
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.
jstat [-命令选项] [-h标题之前的内容行数] [vmid] [间隔时间/毫秒] [查询次数]
其中 option 可选及其示例:
- class 显示加载class的数量,及所占空间等信息
Loaded Bytes Unloaded Bytes Time
7961 14216.6 0 0.0 3.67
- compiler 显示VM实时编译的数量等信息
Compiled Failed Invalid Time FailedType FailedMethod
4156 1 0 12.33 1 org/springframework/boot/loader/jar/Handler openConnection
- gc 显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是 young gc 的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
12288.0 12288.0 0.0 0.0 206848.0 119412.2 140800.0 13896.3 35416.0 32942.8 4736.0 4310.2 7 0.081 2 0.080 0.161
- jstat -gccapacity:可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推, OC是old 内存的占用量。
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
87040.0 1397760.0 363008.0 12288.0 12288.0 206848.0 175104.0 2796544.0 140800.0 140800.0 0.0 1079296.0 35416.0 0.0 1048576.0 4736.0 7 2
- gcnew new对象的信息
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
12288.0 12288.0 0.0 0.0 4 15 12288.0 206848.0 119412.2 7 0.081
- gcnewcapacity new对象的信息及其占用量
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC
87040.0 1397760.0 363008.0 465920.0 12288.0 465920.0 12288.0 1396736.0 206848.0 7 2
- gcold old对象的信息
MC MU CCSC CCSU OC OU YGC FGC FGCT GCT
35416.0 32942.8 4736.0 4310.2 140800.0 13896.3 7 2 0.080 0.161
- gcoldcapacity old对象的信息及其占用量
OGCMN OGCMX OGC OC YGC FGC FGCT GCT
175104.0 2796544.0 140800.0 140800.0 7 2 0.080 0.161
- gcutil 统计gc信息统计
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 0.00 61.23 9.87 93.02 91.01 7 0.081 2 0.080 0.161
- printcompilation 当前VM执行的信息。 除了以上一个参数外,还可以同时加上 两个数字,
Compiled Size Type Method
4272 1558 1 java/util/TreeMap put
以上为 jstat -option vmid 示例,这种每次只会获取当时的信息,如果想多次获取,可以配合 interval 参数来获取,例如:每隔 1000 毫秒获取一次 vmid 为 95980 的 gcutil 信息,总共获取 7 次,其中每 2 次样本间打印下表头 jstat -gcutil -h2 95980 1000 7
jstat -gcutil -h2 95980 1000 7
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 0.00 61.23 9.87 93.02 91.01 7 0.081 2 0.080 0.161
0.00 0.00 61.23 9.87 93.02 91.01 7 0.081 2 0.080 0.161
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 0.00 61.23 9.87 93.02 91.01 7 0.081 2 0.080 0.161
0.00 0.00 61.23 9.87 93.02 91.01 7 0.081 2 0.080 0.161
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 0.00 61.23 9.87 93.02 91.01 7 0.081 2 0.080 0.161
0.00 0.00 61.23 9.87 93.02 91.01 7 0.081 2 0.080 0.161
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 0.00 61.23 9.87 93.02 91.01 7 0.081 2 0.080 0.161
其中每个 jdk 版本中 option 有所不同,具体可见最后的参考文档
jstack – 用来查看堆栈信息
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
示例
jstack -l 95980
内容过长,删除了一部分
2020-12-26 23:54:06
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.144-b01 mixed mode):
"DestroyJavaVM" #34 prio=5 os_prio=31 tid=0x00007f94fcdbc800 nid=0xf03 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"http-nio-8080-Acceptor" #33 daemon prio=5 os_prio=31 tid=0x00007f94f77ea000 nid=0x9903 runnable [0x000070000c98b000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:422)
at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:250)
- locked <0x000000077139e090> (a java.lang.Object)
at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:469)
at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:71)
at org.apache.tomcat.util.net.Acceptor.run(Acceptor.java:106)
at java.lang.Thread.run(Thread.java:748)
Locked ownable synchronizers:
- None
"http-nio-8080-ClientPoller" #32 daemon prio=5 os_prio=31 tid=0x00007f94f77c2000 nid=0x6c03 runnable [0x000070000c888000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.KQueueArrayWrapper.kevent0(Native Method)
at sun.nio.ch.KQueueArrayWrapper.poll(KQueueArrayWrapper.java:198)
at sun.nio.ch.KQueueSelectorImpl.doSelect(KQueueSelectorImpl.java:117)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <0x00000007715d6ca8> (a sun.nio.ch.Util$3)
- locked <0x00000007715d6c98> (a java.util.Collections$UnmodifiableSet)
- locked <0x00000007715d6b78> (a sun.nio.ch.KQueueSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at org.apache.tomcat.util.net.NioEndpoint$Poller.run(NioEndpoint.java:711)
at java.lang.Thread.run(Thread.java:748)
Locked ownable synchronizers:
- None
"http-nio-8080-exec-10" #31 daemon prio=5 os_prio=31 tid=0x00007f94f77e9800 nid=0x6b03 waiting on condition [0x000070000c785000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x000000077155fc40> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:108)
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Locked ownable synchronizers:
- None
"http-nio-8080-exec-1" #22 daemon prio=5 os_prio=31 tid=0x00007f94fe812000 nid=0x6203 waiting on condition [0x000070000be6a000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x000000077155fc40> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:108)
at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:33)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Locked ownable synchronizers:
- None
"http-nio-8080-BlockPoller" #21 daemon prio=5 os_prio=31 tid=0x00007f95004ef000 nid=0x6003 runnable [0x000070000bd67000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.KQueueArrayWrapper.kevent0(Native Method)
at sun.nio.ch.KQueueArrayWrapper.poll(KQueueArrayWrapper.java:198)
at sun.nio.ch.KQueueSelectorImpl.doSelect(KQueueSelectorImpl.java:117)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <0x000000077139fb70> (a sun.nio.ch.Util$3)
- locked <0x000000077139fae8> (a java.util.Collections$UnmodifiableSet)
- locked <0x000000077139f718> (a sun.nio.ch.KQueueSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at org.apache.tomcat.util.net.NioBlockingSelector$BlockPoller.run(NioBlockingSelector.java:313)
Locked ownable synchronizers:
- None
"HikariPool-1 housekeeper" #19 daemon prio=5 os_prio=31 tid=0x00007f94f7972800 nid=0x5c03 waiting on condition [0x000070000bb61000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x000000076e91c418> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Locked ownable synchronizers:
- None
"container-0" #17 prio=5 os_prio=31 tid=0x00007f94f9433000 nid=0x5a03 waiting on condition [0x000070000b95b000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at org.apache.catalina.core.StandardServer.await(StandardServer.java:570)
at org.springframework.boot.web.embedded.tomcat.TomcatWebServer$1.run(TomcatWebServer.java:197)
Locked ownable synchronizers:
- None
"Catalina-utility-1" #15 prio=1 os_prio=31 tid=0x00007f95000df800 nid=0xa703 waiting on condition [0x000070000b755000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000006c081d398> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)
at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Locked ownable synchronizers:
- None
"Attach Listener" #14 daemon prio=9 os_prio=31 tid=0x00007f94fc0c6000 nid=0xa80b waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"Service Thread" #9 daemon prio=9 os_prio=31 tid=0x00007f94f8029000 nid=0x4003 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"C2 CompilerThread0" #5 daemon prio=9 os_prio=31 tid=0x00007f94f7014800 nid=0x3c03 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"Signal Dispatcher" #4 daemon prio=9 os_prio=31 tid=0x00007f94f9035800 nid=0x3a03 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"Finalizer" #3 daemon prio=8 os_prio=31 tid=0x00007f94f800c800 nid=0x4d03 in Object.wait() [0x000070000ad34000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000006c001e8c0> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
- locked <0x00000006c001e8c0> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)
Locked ownable synchronizers:
- None
"Reference Handler" #2 daemon prio=10 os_prio=31 tid=0x00007f94f901c800 nid=0x4f03 in Object.wait() [0x000070000ac31000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000006c000f050> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:502)
at java.lang.ref.Reference.tryHandlePending(Reference.java:191)
- locked <0x00000006c000f050> (a java.lang.ref.Reference$Lock)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153)
Locked ownable synchronizers:
- None
"VM Thread" os_prio=31 tid=0x00007f94f8009800 nid=0x3003 runnable
"GC task thread#0 (ParallelGC)" os_prio=31 tid=0x00007f94f780d000 nid=0x2407 runnable
"GC task thread#7 (ParallelGC)" os_prio=31 tid=0x00007f94f780f800 nid=0x5103 runnable
"VM Periodic Task Thread" os_prio=31 tid=0x00007f94f8032000 nid=0xa903 waiting on condition
JNI global references: 1780
线程dump的分析工具:
IBM Thread and Monitor Dump Analyze for Java【www.ibm.com/support/pag… 一个小巧的Jar包,能方便的按状态,线程名称,线程停留的函数排序,快速浏览。 spotify.github.io/threaddump-… Spotify提供的Web版在线分析工具,可以将锁或条件相关联的线程聚合到一起。
参考文档
- Java7 docs.oracle.com/javase/7/do…
- Java8 docs.oracle.com/javase/8/do…
- Java9 docs.oracle.com/javase/9/to…
- Java10 docs.oracle.com/javase/10/t…
- Java11 docs.oracle.com/en/java/jav…
- Java12 docs.oracle.com/en/java/jav…
- Java13 docs.oracle.com/en/java/jav…
- Java14 docs.oracle.com/en/java/jav…
- Java15 docs.oracle.com/en/java/jav…
- JavaAll docs.oracle.com/en/java/jav…