java程序運行時,有時會產生javacore及heapdump文件,爲何會產生這些文件呢?產生後應該如何分析呢?本文將回答上面的問題。java
java程序在遇到致命問題時,就會產生這兩個文件,有時產生時,java應用不會死掉,還能繼續運行,有時則java進程會死掉,即java進程被殺死。爲了可以保留java應用發生致命錯誤前的java的運行狀態,jvm在死掉前產生兩個文件,分別爲javacore及heapdump文件。linux
javacore文件主要保存的是java應用各線程在某一時刻的運行的位置,即執行到哪個類的哪個方法哪個行上。javacore是一個文本文件,打開後能夠看到每個線程的執行棧,以stacktrace的方式顯示。經過對javacore的分析能夠獲得應用是否「卡」在某一點上,即在某一點運行的時間太長,如數據庫查詢,長期得不到響應,最終致使系統崩潰。數據庫
heapdump文件是一個二進制文件,它保存了某一時刻jvm堆中對象狀況,這種文件須要相應的工具進行分析,筆者用得較多的是heap analyzer這個工具。這個文件最重要的做用就是分析系統是否存在內存溢出的狀況,經過heapanalyzer能夠很簡單地分析出溢出的位置。jvm
這兩個文件也能夠手工的方式生成,常常咱們會遇到系統變慢或無響應的狀況,這個時候就以採用手工的方式生成javacore及heapdump文件,經過對這兩個文件的分析,查出緣由進而解決問題,在unix/linux上,產生這兩個文件的方法是首先,ps -ef|grep java 找出java進程id ,而後再執行kill -3 進程號 的操做,等文件生成後再作一次一樣的操做,再產生一組文件,兩組文件在分析javacore時特別有效,困爲它能夠看出在前後兩個時間點上,線程執行的位置,若是發現前後兩組數據中同一線程都執行在同一位置,則說明此處可能有問題,由於程序運行是極快的,若是兩次均在某一點上,說明這一點耗時是很大的。工具
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/jjyyaa007/archive/2010/02/25/5323899.aspx.net