一朋友打電話求助,問怎樣簡單方便的分析WAS的JAVACORE文件。我給他做了個實例解析,下面是一個過程記錄。
一、工具下載
可從IBM官網下載JCA工具,專門用來分析JAVACORE文件的工具。使用JCA工具需要JAVA環境,再下載一個JDK。由於我們使用的JCA是3.9.6版,所以下載一個JDK1.6版的就行。
二、啓動JCA工具
安裝完JDK1.6後,配置JAVA環境。JAVA環境的配置簡單說一下:
打開 我的電腦--屬性--高級--環境變量
新建系統變量JAVA_HOME 和CLASSPATH
變量名:JAVA_HOME
變量值:C:\Program Files\Java\1.6.0_37
變量名:CLASSPATH
變量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
選擇“系統變量”中變量名爲“Path”的環境變量,雙擊該變量,把JDK安裝路徑中bin目錄的絕對路徑,添加到Path變量的值中,並使用半角的分號和已有的路徑進行分隔。
變量名:Path
變量值:C:\Program Files\Java\1.6.0_37\bin;C:\Program Files\Java\1.6.0_37\jre\bin;
啓動JCA工具
C:\jca396>java -Xmx2000M -jar jca396.jar
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.
如果出現這個錯誤,把內存分配小點就可以了。
C:\jca396>java -Xmx500M -jar jca396.jar javacore.20131101.txt
點開waiting狀態比較多的事件,有如下顯示
這是典型的BLOCK堆載,在IBM官網有相應的參考文章,解決這個問題一個比較簡單的方法就是增大WAS的JVM大小。
三、解決問題
進入WAS控制檯,找到JVM設置,進行調整。如圖:
服務器--應用程序服務器--app01--進程定義-Java 虛擬機
注:當部署在websphere上的應用出現了問題,比如調用緩慢,線程掛起,節點假死的時候,光看應用的SystemOut.log是不夠的,我們還需要手動生成javacore文件,查詢服務器上各個線程的堆棧情況,它可以具體到一個方法的調用情況。Javacore是Java應用程序在某一時間的文本表示形式,也可理解爲Java Dump(通常稱爲Thread Dump)的線程轉儲文件。該文件記錄了整個JVM的運行情況,包含線程、垃圾回收、JVM運行參數、內存地址等信息。JVM的許多問題都可以用這個文件進行診斷,其中比較典型的包括線程阻塞、CPU使用率過高、JVM Crash、堆內存不足和類裝載等問題。
Javacore文件通常以*.txt方式顯示,名稱格式主要是以Javacore爲頭,加上日期號、產生的時間號、當時的線程編號。
Javacore文件的生成
ps -ef | grep java查看進程ID,在linux 系統中 使用 kill -3 pid ,它會在應用程序的概要文件的目錄下生成一個javacore 文件,比如在 /usr/IBM/WebSphere/AppServer1/profiles/AppSrv01下