1.dumpclass
dumpclass这个小工具做了一些增强,更加方便地使用。
支持? *的匹配
支持多个ClassLoader加载了同名类的情况。
比如多个classloader加载了多份的logger,如果不做区分,则dump出来时会被覆盖掉,也分析不出问题。
dumpclass可以在maven仓库里下载到:
http://search.maven.org/#search%7Cga%7C1%7Cdumpclass
dumpclass的用法很简单,比如:
Usage:
pattern : class name wildcard match pattern
--noStat : do not print dump stat (default: false)
--sensitive : class name wildcard match sensitive. In mac os, try
this option. (default: false)
-c (--classLoaderPrefix) : classLoaderPrefix (default: false)
-o (--outputDir) VAL : outputDir
-p (--pid) N : pid
Example:
java -jar dumpclass.jar -p 4345 *StringUtils
java -jar dumpclass.jar -p 4345 -o /tmp/dump *StringUtils
java -jar dumpclass.jar -p 4345 -o /tmp/dump --classLoaderPrefix *StringUtils
对于多个ClassLoader的情况,可以使用--classLoaderPrefix,这样子在输出.class文件时,会为每一个ClasssLoader创建一个目录,比如:sun.jvm.hotspot.oops.Instance@955d26b8。并且会在目录下放一个classLoader.text文件,里面是ClassLoader.toString()的内容,方便查看具体ClassLoader是什么。
2.HSDB
启动
java -classpath "%JAVA_HOME%/lib/sa-jdi.jar" sun.jvm.hotspot.HSDB
然后输入pid之后,点击tool
然后可以看运行是的字节码 和stack信息 运行时常量池之类的数据。