在使用Java的程序中难免会遇上程序异常的现象,此时就可以使用JDK下的jstack和jmap来跟踪观察JVM中的内存堆栈信息用以分析,不过注意的是如果是在windows版本或者是开源版中一般都是没有的,如果需要使用需要安装相应的开发调试工具,下面就简单的说一说:
jstack 一般而言之后跟着都是Java程序运行的pid或者是相应的Java代码文件,如:jstack $pid,平时可以把相关的堆栈信息再导出到某一个文件中正用以进一步观察,如:jstack $pid > file.dump
jmap 同jstack的功能效果是差不多的,不过相比而言它会更为的强大一些,同样它之后也是跟着Java程序运行的pid,但是它还有一些参数选项:
默认是没有带这些参数选项的,仅能打印一些简单的信息-heap 用于打印Java的堆栈的摘要信息-histo[:live] 用于打印堆栈的实时信息,常用于堆栈的实时跟踪-clstats 用于打印Java中的类加载的信息-finalizerinfo 用于打印关于等待确定的对象的信息-dump:<dump-options> 把相关的堆栈信息dump至二进制文件中用于开发调试工具中使用,如:jmap -dump:format=b,file=Java_jmp.hprof $pid-F 该选项跟着-dump选项一起使用,表示在dump出的二进制文件中不打印打印堆栈的实时信息,但是其他的信息都有打印-J<flag> 将标志传给Java程序,即在做断点
总之在Java的程序发生异常的时候利用其中相关的堆栈跟踪内建指令都能很好的排查其中的问题