I'm used to seeing Java thread dumps that look like this: this is the one generated by the Sun HotSpot JVM and their derivatives, such as OpenJDK:
"main" prio=10 tid=0x00007f4020009000 nid=0x538c in Object.wait() [0x00007f402891f000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x0000000614ea64e8> (a java.lang.Object) at java.lang.Object.wait(Object.java:503) at org.eclipse.jetty.util.thread.QueuedThreadPool.join(QueuedThreadPool.java:386) - locked <0x0000000614ea64e8> (a java.lang.Object) at org.eclipse.jetty.server.Server.join(Server.java:398) at org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:531) at org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:364) at org.mortbay.jetty.plugin.JettyRunMojo.execute(JettyRunMojo.java:528) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
Now, helping other users using my software, I sometimes come across another form of stream dumps, such as:
Thread 9255: (state = BLOCKED) - sun.reflect.annotation.AnnotationType.getInstance(java.lang.Class) @bci=0, line=63 (Interpreted frame) - sun.reflect.annotation.AnnotationParser.parseAnnotation(java.nio.ByteBuffer, sun.reflect.ConstantPool, java.lang.Class, boolean) @bci=94, line=202 (Interpreted frame) - sun.reflect.annotation.AnnotationParser.parseAnnotations2(byte[], sun.reflect.ConstantPool, java.lang.Class) @bci=39, line=69 (Compiled frame) - sun.reflect.annotation.AnnotationParser.parseAnnotations(byte[], sun.reflect.ConstantPool, java.lang.Class) @bci=11, line=52 (Compiled frame) - java.lang.Class.initAnnotationsIfNecessary() @bci=22, line=3070 (Interpreted frame) - java.lang.Class.getAnnotation(java.lang.Class) @bci=13, line=3029 (Interpreted frame) - com.google.inject.internal.Annotations.isRetainedAtRuntime(java.lang.Class) @bci=3, line=57 (Interpreted frame) - com.google.inject.Key.ensureRetainedAtRuntime(java.lang.Class) @bci=1, line=362 (Interpreted frame) - com.google.inject.Key.strategyFor(java.lang.annotation.Annotation) @bci=15, line=339 (Interpreted frame) - com.google.inject.Key.get(com.google.inject.TypeLiteral, java.lang.annotation.Annotation) @bci=6, line=274 (Interpreted frame) - com.google.inject.assistedinject.FactoryProvider2.assistKey(java.lang.reflect.Method, com.google.inject.Key, com.google.inject.internal.Errors) @bci=14, line=522 (Interpreted frame) - com.google.inject.assistedinject.FactoryProvider2.<init>(com.google.inject.Key, com.google.inject.assistedinject.BindingCollector) @bci=306, line=235 (Interpreted frame)
As you can see, the format is completely different and inferior. It does not report blocked locks and does not report which object it is waiting for.
Does anyone know which JavaVM family creates the second stack trace style? I never used it myself, and it distorted me a little!
java thread-dump
Kohsuke kawaguchi
source share