国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

基于JavaCore文件的深入分析

2019-11-26 16:08:04
字體:
來源:轉載
供稿:網友

 產生時間

  Java程序運行時,有時會產生JavaCore及HeapDump文件,它一般發生于Java程序遇到致命問題的情況下。

  有時致命問題發生后,Java應用不會死掉,還能繼續運行;

  但有時致命問題發生,Java進程會死掉;

  為了能夠保留Java應用發生致命錯誤前的運行狀態,JVM在死掉前產生兩個文件,分別為JavaCore及HeapDump文件。

有何區別

  JavaCore是關于CPU的,而HeapDump文件是關于內存的。

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

  HeapDump文件是一個二進制文件,它保存了某一時刻JVM堆中對象使用情況,這種文件需要相應的工具進行分析,如IBM Heap Analyzer這類工具。這類文件最重要的作用就是分析系統中是否存在內存溢出的情況。

怎么生成

  這兩個文件可以用手工的方式生成,當我們會遇到系統變慢或無響應的情況,這時就以采用手工的方式生成JavaCore及HeapDump文件。

  在Unix/Linux上,產生這兩個文件的方法如下:

復制代碼 代碼如下:

    # ps -ef | grep java 
    user 4616 4582 0 17:30 pts/0 00:00:00 grep java 
    root 5580 1 0 Oct27 ? 00:02:27 /usr/bin/java -server -XX:PermSize=64M -XX:MaxPermSize=128m -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=/usr/local/tomcat8090/conf/logging.properties -Djava.endorsed.dirs=/usr/local/tomcat8090/endorsed -classpath :/usr/local/tomcat8090/bin/bootstrap.jar -Dcatalina.base=/usr/local/tomcat8090 -Dcatalina.home=/usr/local/tomcat8090 -Djava.io.tmpdir=/usr/local/tomcat8090/temp org.apache.catalina.startup.Bootstrap start 
    # kill -3 5580


   首先,找出Java進程id ,然后再執行‘kill -3 進程號'的操作,等文件生成后再做一次同樣的操作,再產生一組文件。

如何分析

  JavaCore文件

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

  JavaCore文件的頭部有一個“Current Thread Details”標記,它記錄了JavaCore產生時系統運行的線程id,使用線程id在文件中查找線程的詳細信息,該信息中記載了線程運行哪個類的時候造成的JavaCore。

復制代碼 代碼如下:

    NULL ------------------------------------------------------------------------ 
    0SECTION TITLE   subcomponent dump routine 
    NULL =============================== 
    1TISIGINFOOUTOFMEMORY received 
    1TIDATETIME Date: 2011/12/07 at 15:59:42 
    1TIFILENAME Javacore filename:/usr/WebSphere/AppServer/profiles/WCSProdNode2/javacore19202086.1323298782.txt 
    NULL ------------------------------------------------------------------------ 
    0SECTION XHPI subcomponent dump routine 
    NULL   ============================== 
    1XHTIME Wed Dec 7 15:59:42 2011 
    1XHSIGRECV Unexpected   signal -1 received at   0x0 in <unknown>. Processing   terminated. 
    1XHFULLVERSION J2RE 1.4.2 IBM AIX build ca142ifx-20090918 (SR13   FP2) 
    NULL           
    1XHCURRENTTHD Current Thread   Details 
    NULL ---------------------- 
    2XHCURRSYSTHD "WebContainer :   5" sys_thread_t:0x45FB5328 
    3XHNATIVESTACK Native Stack 
    NULL ------------ 
    3XHSTACKLINEERR unavailable -   stack address not valid 
    ::: 
    ::: 
    0SECTION XM subcomponent   dump routine 
    NULL ============================ 
    NULL            
    1XMCURTHDINFO Current Thread Details 
    NULL ---------------------- 
    3XMTHREADINFO "WebContainer : 5" (TID:0x70A8E260, sys_thread_t:0x45FB5328, state:R, native ID:0x5CC0)   prio=5
    4XESTACKTRACE at   org.apache.taglibs.standard.tag.common.core.ImportSupport$ImportResponseWrapper.getString(Unknown   Source) 
    4XESTACKTRACE at   org.apache.taglibs.standard.tag.common.core.ImportSupport.acquireString(Unknown   Source) 
    4XESTACKTRACE at   org.apache.taglibs.standard.tag.common.core.ImportSupport.doEndTag(Unknown   Source) 
    4XESTACKTRACE at   com.ibm._jsp._part._jspx_meth_c_import_3(_part.java(Compiled Code)) 
    4XESTACKTRACE at   com.ibm._jsp._part._jspx_meth_c_otherwise_3(_part.java(Compiled   Code)) 
    4XESTACKTRACE at   com.ibm._jsp._part._jspx_meth_c_choose_4(_part.java(Compiled Code)) 
    4XESTACKTRACE at   com.ibm._jsp._part._jspService(_part.java:3237)


   這樣結合當時的日志文件可以找到問題產生的原因。不過,這種方法只能找到不是內存溢出的錯誤,對于在core文件頭就有java/lang/outMemoryException的錯誤還是不知道是執行到哪個類的時候出現。

  HeapDump文件
  HeapDump文件是指定時刻的Java堆棧的快照,是一種鏡像文件。Heap Analyzer工具通過分析HeapDump文件,哪些對象占用了太多的堆棧空間,來發現導致內存泄露或者可能引起內存泄露的對象。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 苗栗市| 乐亭县| 丹江口市| 庆阳市| 手游| 日土县| 辽宁省| 望奎县| 和顺县| 克拉玛依市| 福鼎市| 宁城县| 丹江口市| 克拉玛依市| 洛扎县| 双城市| 会昌县| 营山县| 馆陶县| 定兴县| 辽源市| 上饶市| 山东省| 闻喜县| 巩留县| 贵定县| 青神县| 舟山市| 东港市| 南部县| 昌黎县| 齐河县| 吉木萨尔县| 张掖市| 怀远县| 含山县| 六安市| 安福县| 新绛县| 达州市| 兴宁市|