Once you have below java options
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
(Note: all tools mentioned below are available in <JAVA_HOME>/bin)
Using jdb
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8000
> suspend
All threads suspended.
"where all" will give snapshot of all threads.
> where all
http-127.0.0.1-8443-6:
[1] java.lang.Object.wait (native method)
[2] java.lang.Object.wait (Object.java:485)
[3] org.apache.tomcat.util.net.JIoEndpoint$Worker.await (JIoEndpoint.java:416)
[4] org.apache.tomcat.util.net.JIoEndpoint$Worker.run (JIoEndpoint.java:442)
[5] java.lang.Thread.run (Thread.java:662)
http-127.0.0.1-8443-5:
[1] java.lang.Object.wait (native method)
[2] java.lang.Object.wait (Object.java:485)
[3] org.apache.tomcat.util.net.JIoEndpoint$Worker.await (JIoEndpoint.java:416)
[4] org.apache.tomcat.util.net.JIoEndpoint$Worker.run (JIoEndpoint.java:442)
[5] java.lang.Thread.run (Thread.java:662)
http-127.0.0.1-8443-4:
[1] java.lang.Object.wait (native method)
[2] java.lang.Object.wait (Object.java:485)
...
..
to resume all threads.
> resume
Using jstack -
jstack <jvmid> (you can get jvmid using jps)
For example -
C:\Documents and Settings\Administrator>jps
4416 Main
5800
3300 Jps
6676
C:\Documents and Settings\Administrator>jstack 4416
2011-12-27 16:32:19
Full thread dump Java HotSpot(TM) Server VM (19.0-b09 mixed mode):
"ajp-127.0.0.1-8009-Acceptor-0" daemon prio=6 tid=0x6fc39c00 nid=0x11fc runnable [0x6d27f000]
java.lang.Thread.State: RUNNABLE
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390)
- locked <0x14495ae0> (a java.net.SocksSocketImpl)
To get thread dump using jboss jmx-console, please go through below link
http://atgkid.blogspot.com/2011/10/how-to-take-thread-dumps-in-jboss.html
2) To take heap dumps -
Using jmap (available from jdk 1.6 but can also be used on jvm with 1.4+ )
jmap -dump:format=b,file=<filename>.hprof <jvmid>
C:\Documents and Settings\Administrator>jps
4416 Main
5800
3300 Jps
6676
C:\Documents and Settings\Administrator>jmap -dump:format=b,file=sample.hprof 4416
Dumping heap to C:\Documents and Settings\Administrator\sample.hprof ...
Heap dump file created
Using java option -XX:+HeapDumpOnOutOfMemoryError
Once you have above java option, JVM will create heap dump once it is out of memory.
Using jconsole - Java Monitoring and Management Console - JMX-compliant graphical tool for monitoring a Java virtual machine. It can monitor both local and remote JVMs
To use jconsole you need to have java option "-Dcom.sun.management.jmxremote"
heap dump file will be created in folder from where the application is run. For example - <JBOSS-HOME>/bin or <BEA-DOMAIN-HOME>/bin
Using jvisualvm - comes with java 1.6 but can be used to visualize/monitor applications running on jdk 1.4 and higher.
Monitor showing CPU and Heap Usage and total threads and classes.
To get thread dump you can use
Sample heap dump taken using jvisualvm
To take thread dumps in jvisualvm
Sample Thread dump taken using jvisualvm
Never knew these tools existed in java distribution... goood one...keep it going...
ReplyDeleteGood one
ReplyDeletepretty cool..very handy!
ReplyDeleteFor 10.2, you can use /atg/dynamo/service/ThreadDumpService on dyn/admin to get thread dumps on debug log, provided the performance of your instance is accepting a new HTTP session
ReplyDelete- Dhaya
I tried a online tool http://fastthread.io/ it parses all formats of thread dumps and produces beautiful graphs.
ReplyDeleteusefull information. World-class thread dump analyzer to fire fight any sort of JVM related availability, scalability and performance problems. Applies several intelligence patterns discovers the root cause of the problem instantly.Java Thread Dump
ReplyDeleteAnalyzer