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 添加硬件内存数或修改代码。