Windchill 在 AIX heapdump 和 javacore的問題
Windchill系統中,產生dump和javacore的主要原因是記憶體溢出,一般情況下,Methodserver和tomcat的記憶體設定偏小,在並發使用者很多時,會造成記憶體溢出,這種情況只要修改配置就可以;另外還有伺服器的配置已經達到瓶頸,只能升級伺服器的硬體設定了,建議配置是1個CPU需要4G的記憶體;還有一種是由於客制化代碼不規範,沒有釋放資源,造成記憶體的堆積,這種情況只要重啟Windchill服務就正常了,需要跟蹤代碼,難度較大。
你是不是在AIX裡裝了用到IBM JVM的服務。比如WebLogic,Websphere?
一般是IBM JVM崩潰或者JVM記憶體溢出時才產生這種檔案。
你的JDK是什麼版本的。
以下是IBM針對WebSphere及不同版本的JDK給出的解決方案,你可以參考一下:
一 IBM JDK V1.3.1 SR5版本
為了輔助第一時間捕捉錯誤資訊,從IBM JDK V1.3.1 SR5(131-20030618)版本開始,當Java的堆空間耗盡時系統會自動的產生heapdumps和javacores。如果希望在Java堆空間耗盡時不會自動的產生heapdumps和javacores,請按照如下的步驟操作:
對於WAS 4.0.x:
1. 找到<WAS_HOME>/bin/startupServer.sh (.bat)檔案,其中<WAS_HOME>表示WAS的安裝目錄
2. 用文字編輯器開啟該檔案,並在檔案的頂部添加如下的2行:
Unix平台:
export IBM_HEAPDUMP_OUTOFMEMORY=false
export IBM_JAVADUMP_OUTOFMEMORY=false
Window平台:
set IBM_HEAPDUMP_OUTOFMEMORY=false
set IBM_JAVADUMP_OUTOFMEMORY=false
3. 儲存並關閉檔案,重新啟動WAS
對於WAS 5.0.x或者5.1.x:
1. 開啟管理主控台,依次選擇:伺服器 > 應用伺服器 > 需要更改的伺服器名稱 > 進程定義 > 環境條目
2. 建立如下的2個條目:
Name Value
IBM_HEAPDUMP_OUTOFMEMORY false
IBM_JAVADUMP_OUTOFMEMORY false
3. 儲存配置的更改,重新啟動WAS
二 IBM java SDK 1.4.2 SR5
從 java SDK 1.4.2 SR5開始,關於產生heapdump和javacore,引入了一個新的特性去避免系統自動產生heapdump和javacore 造成作業系統檔案系統空間被耗盡,這樣在java SDK 1.4.2 SR5及之後的版本中,當使用 kill -3時也將不會產生heapdump和javacore檔案。
這個新的特性可以允許設定相應的選項來控制java進程在收到相應的訊號時最多產生多少個heapdump和javacore檔案。要使用這個新的特性,需要首先在作業系統的環境中設定下面的變數:
export JAVA_DUMP_OPTS="ONANYSIGNAL(JAVADUMP[n],HEAPDUMP[m])"
其中,n 是最大的javacore產生的數目, m 是最大的heapdump產生的數目。
在設定了這個變數後,java進程在收到kill -3 (或其他的訊號)時將會產生heapdump和javacore檔案,檔案的最大數目分別等於選項中的m和n的值,可以根據實際的需求設定合理的m和n的值。
例如:
在啟動websphere之前,設定下面的環境變數:
export JAVA_DUMP_OPTS="ONANYSIGNAL(JAVADUMP[5],HEAPDUMP[5])"
這樣在收到相應的訊號的時候,將最大產生5個heapdump和javacore,之後將不會再產生heapdump和javacore檔案。
注意:
如果設定了IBM_heapdump=true變數,將會產生一個額外的heapdump檔案,這樣heapdump的檔案將會是n+1個,在Java SDK 1.4.2 SR7中將避免這個情況。
如果以上2種方法不能解決,以下2個建議
1 到IBM官方網站查詢是否還有別的解決方案,以下是網址
http://www-900.ibm.com/cn/support/viewdoc/knowledgebase
2 添加硬體記憶體數或修改代碼。