在使用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的程序發生異常的時候利用其中相關的堆棧跟蹤內建指令都能很好的排查其中的問題