jstat,这个工具很强大,可以监测Java虚拟机GC多方面的状态,具体参数含义参见此链接:
jmap,这大概是最常用的命令。下面这个命令不但可以列出类的实例数量,还有强制进行一次full GC的“副作用”,这样的副作用对于定位某些问题很有帮助,参见《使用堆外内存》:
使用-heap参数,则可以打印堆的使用情况:
使用-permstat参数,查看永久区:
把内存中的堆dump成一个镜像文件:
jstack,线程堆栈打印。注意waiting to lock <xxx>在等待锁,比如进入临界区时;locked <xxx>表示当前同步操作,线程锁住了某资源;而waiting on <xxx>指的是在同步块内,wait方法的执行中暂时地释放了该锁的占用,等唤醒的时候需要重新获取:
jinfo,可以打印JVM执行的参数信息,有一个非常大的作用在于,部分JVM参数在执行过程中是可以修改的,请参见这篇《通过jinfo工具在full GC前后做heap dump》,通过jinfo改变参数HeapDumpBeforeFullGC和HeapDumpAfterFullGC,输出heap dump后,再改回来。
jhat,可以比对core文件之间的对象变化,支持对象查询语言(OQL),请参见这里。
javap,用于反编译class文件,对于JVM指令集,这里有完整的文档。
新闻热点
疑难解答