轉載:javacore文件及heapdump文件分析

轉載自:http://blog.csdn.net/jjyyaa007/article/details/5323899


Java程序運行時,有時會產生javacore及heapdump文件,爲什麼會產生這些文件呢?產生後應該如何分析呢?本文將回答上面的問題。

 

java程序在遇到致命問題時,就會產生這兩個文件,有時產生時,java應用不會死掉,還能繼續運行,有時則java進程會死掉,即java進程被殺死。爲了能夠保留java應用發生致命錯誤前的java的運行狀態,jvm在死掉前產生兩個文件,分別爲javacore及heapdump文件。

 

javacore文件主要保存的是java應用各線程在某一時刻的運行的位置,即執行到哪一個類的哪一個方法哪一個行上。javacore是一個文本文件,打開後可以看到每一個線程的執行棧,以stacktrace的方式顯示。通過對javacore的分析可以得到應用是否“卡”在某一點上,即在某一點運行的時間太長,如數據庫查詢,長期得不到響應,最終導致系統崩潰。

 

heapdump文件是一個二進制文件,它保存了某一時刻jvm堆中對象情況,這種文件需要相應的工具進行分析,筆者用得較多的是heap analyzer這個工具。這個文件最重要的作用就是分析系統是否存在內存溢出的情況,通過heapanalyzer可以很簡單地分析出溢出的位置。

 

這兩個文件也可以手工的方式生成,經常我們會遇到系統變慢或無響應的情況,這個時候就以採用手工的方式生成javacore及heapdump文件,通過對這兩個文件的分析,查出原因進而解決問題,在unix/Linux上,產生這兩個文件的方法是首先,ps -ef|grep java 找出java進程id ,然後再執行kill -3 進程號 的操作,等文件生成後再做一次同樣的操作,再產生一組文件,兩組文件在分析javacore時特別有效,困爲它可以看出在先後兩個時間點上,線程執行的位置,如果發現先後兩組數據中同一線程都執行在同一位置,則說明此處可能有問題,因爲程序運行是極快的,如果兩次均在某一點上,說明這一點耗時是很大的。

發佈了88 篇原創文章 · 獲贊 15 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章