<menu id="k0e80"><tt id="k0e80"></tt></menu>
  • 專注Java教育12年 全國咨詢/投訴熱線:400-8080-105

    首頁 學習攻略 各種環境下Javacore與heapdump生成大法

    各種環境下Javacore與heapdump生成大法

    更新時間:2019-08-22 11:13 來源:動力節點 瀏覽1448次

      JavaCore文件主要保存的是Java應用各線程在某一時刻的運行的位置,即JVM執行到哪一個類、哪一個方法、哪一個行上。


      它是一個文本文件,打開后可以看到每一個線程的執行棧,以stacktrace的顯示。


      通過對JavaCore文件的分析可以得到應用是否“卡”在某一點上,即在某一點運行的時間太長,例如數據庫查詢,長期得不到響應,最終導致系統崩潰等情況。


      HeapDump文件是一個二進制文件,它保存了某一時刻JVM堆中對象使用情況。


      這種文件需要相應的工具進行分析,如IBMHeapAnalyzer這類工具。這類文件最重要的作用就是分析系統中是否存在內存溢出的情況。


      在NC的項目上我們經常要生成javacore和heapdump來進行分析。這里總結一下我自己在NC項目上生成這兩個文件的方法。


      JAVACORE篇:


      WINDOWS平臺:


      ORACLEJDK:HOTSPOT


      1.jvisualvm工具。


      jvisualvm是sun的JDK中自帶的工具,在java_home/bin/jvisualvm.exe中就可以打開。


      掛在到對應的java進程后,可以直接生javacore。


      

    image.png

      2.jstack工具。


      jstack為JDK自帶的命令行工具??梢酝ㄟ^jstack-l-r-pid的方式生成對應的javacore。


      其中-l-r可以顯示出詳細信息,鎖信息等。


      3.sendsignal工具。


      sendsignal工具是老外開發的一個小工具,用來生成已知進程號的java進程的javacore。


      附件中有具體工具。通過sendsignal.exepid即可生成。


      4.ctrl+break按鍵


      在Windows上啟動程序的時候,可以直接在啟動NC的窗口按組合鍵生成javacore。


      然而由于NC涉及到兩個java進程,一個小的導程序,一個是正式的程序。


      所以用該方法只能生成引導程序的javacore??床坏缴a環境的實際快照。


      IBMJDK:V9


      1.系統宕機自動生成。


      IBM的JDK在系統宕機的時候會自動生成javacore,這也是我們經常用該JDK替換默認的緣故。


      2.sendsignal工具。


      3.ctrl+break組合鍵。


      4.NMC控制臺。


      NC自帶的監控工具NMC可以直接點擊對應server,右鍵直接生成javacore。


      該工具只針對于Websphere集群生效。對于單機websphere或者NC中間件不生效。


    image.png

      5.Websphere控制臺。


      有的時候我們發現,系統卡死,或者需要同時生成多個Server的javacore的時候,


      我們就需要在websphere的控制臺中直接生成。生成方式為Troubleshooting->Javadumpsandcores。

    image.png

      5.JSP小補丁程序。


      該程序是自己編寫的jsp小程序。


      使用方式為,將javacore.jsp放置到nchome/hotwebs/nc_web下即可,重啟生效。


      訪問的時候,通過ip地址+端口+javacore.jsp即可在JAVA_HOME中生成。


      如127.0.0.1:9081/javacore.jsp。補丁在附件中。


      主要調用IBM的JDK內部方法com.ibm.jvm.Dump.JavaDump();


      LINUX平臺:


      1.kill-3-pid


      在linux平臺上,除了之前的各種方法之外,可以直接調用系統的kill-3方法。


      HEAPDUMP篇:


      WINDOWS平臺:


      ORACLEJDK:HOTSPOT


      1.jvisualvm工具。


      和之前生成javacore的方法類似。


     image.png

      2.jmap方法。


      jmap方法為JDK自帶的方法。通過命令行的方式生成。


      jmap-dump:file=path_to_filepid如jmap-dump:file=d:\2234。


      3.系統宕機自動生成。


      由于oracle的JDK在宕機的時候,不會自動生成heapdump文件。


      需要我們通過添加JVM參數的方式來顯示申明。


      在JVM參數中加-XX:+HeapDumpOnOutOfMemoryError。


      4.通過windows任務管理器。


      windows的任務管理器可以直接將java的堆對象全部轉儲出來。


      只需要點擊右鍵進行保存即可。保存后的文件需要通過類似IBM的MAT分析工具打開。

    image.png

      IBMJDK:V9


      1.系統宕機自動生成。


      2.利用coredump功能。


      利用websphere自帶的coredump功能,可以將所有宕機時的堆棧信息全部輸出。


      包含堆中對象的具體信息,如hashmap中的鍵值都可以看到具體的值。


      是跟蹤宕機問題的終極法寶。


      具體方法為,在JVM中添加參數:--Xdump:system:events=user,request=exclusive+prewalk+compact


      3.JSP小補丁程序。


      該程序是自己編寫的jsp小程序。


      使用方式為,將heapdump.jsp放置到nchome/hotwebs/nc_web下即可,重啟生效。


      訪問的時候,通過ip地址+端口+heapdump.jsp即可在JAVA_HOME中生成。


      如127.0.0.1:9081/heapdump.jsp。補丁在附件中。


      主要調用IBM的JDK內部方法com.ibm.jvm.Dump.HeapDump();


      LINUX平臺:


      和上面的生成方法沒有太大區別。


      以上為目前我總結的所有關于javacore和heapdump的收集方法。


    提交申請后,顧問老師會電話與您溝通安排學習

    免費課程推薦 >>
    技術文檔推薦 >>

    返回頂部
    XXX
    <menu id="k0e80"><tt id="k0e80"></tt></menu>