JVM學習(三)---heapDump導出與案例分析


在故障定位(尤其是out of memory)和性能分析的時候,經常會用到一些文件來幫助我們排除代碼問題。這些文件記錄了JVM運行期間的內存占用、線程執行等情況,這就是我們常說的dump文件。常用的有heap dump和thread dump(也叫javacore,或java dump)。我們可以這么理解:heap dump記錄內存信息的,thread dump是記錄CPU信息的。

        heap dump:

        heap dump文件是一個二進制文件,它保存了某一時刻JVM堆中對象使用情況。HeapDump文件是指定時刻的Java堆棧的快照,是一種鏡像文件。Heap Analyzer工具通過分析HeapDump文件,哪些對象占用了太多的堆棧空間,來發現導致內存泄露或者可能引起內存泄露的對象。

        thread dump:

        thread dump文件主要保存的是java應用中各線程在某一時刻的運行的位置,即執行到哪一個類的哪一個方法哪一個行上。thread dump是一個文本文件,打開后可以看到每一個線程的執行棧,以stacktrace的方式顯示。通過對thread dump的分析可以得到應用是否“卡”在某一點上,即在某一點運行的時間太長,如數據庫查詢,長期得不到響應,最終導致系統崩潰。單個的thread dump文件一般來說是沒有什么用處的,因為它只是記錄了某一個絕對時間點的情況。比較有用的是,線程在一個時間段內的執行情況。

兩個thread dump文件在分析時特別有效,困為它可以看出在先后兩個時間點上,線程執行的位置,如果發現先后兩組數據中同一線程都執行在同一位置,則說明此處可能有問題,因為程序運行是極快的,如果兩次均在某一點上,說明這一點的耗時是很大的。通過對這兩個文件進行分析,查出原因,進而解決問題。

heap導出幾種方式

  1、設置啟動的JVM參數,當heap溢出時自動生成dump,vm options:-XX:+HeapDumpOnOutOfMemoryError  -XX:HeapDumpPath=${目錄}

  2、jmap,命令:jmap -dump:live,file=D:/jvmdump/jmap.hprof [PID]

  3、jcmd,命令:jcmd <pid> GC.heap_dump D:/jvmdump/jmap.hprof

  4、jvisualvm或者jprofiler等可視化工具直接生成heap dump


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM