HP Unix 与 Websphere 集成问题解决方案
概述
某资金管理信息系统的操作系统是 HP Unix , 应用服务器为 IBM Websphere 。在系统开发应用中,偶尔出现启动死机现象,具体的说就是,当修改文件后, copy 到应用服务器的相应位置,然后停止该服务,重启该服务,在重启服务的过程中偶尔会出现停滞现象。
错误原因及解决方案
错误信息
查看后台 Systemout..xml ,错误信息如下 :
SRVE0100E: 未识别出由 servlet context 抛出的 init() 异常: java.lang.OutOfMemoryError: PermGen space
错误原因
PermGen space ,全称是 Permanent Generation space ,就是说是永久保存的区域,用于存放 Class 和 Meta 信息, Class 在被 Load 的时候被放入该区域从字面看,和存放 Instance 的 Heap 区域不同, GC(Garbage Collection) 应该不会对 PermGen space 进行清理,所以如果你的 APP 会 LOAD 很多 CLASS 的话 , 就很可能出现 PermGen space 错误。由于 HP Unix 操作系统 设置 PermGen space 缺省参数相对较小则出现这种问题。每次启动服务时就会在 PermGen space 中划分一块区域保存 Class 和 Meta 信息,所以随着启动服务次数的递增,则 PermGen space 剩余的空间就越来越小,直到不能支持某次重启服务所需要的空间。即报出了“ java.lang.OutOfMemoryError: PermGen space ”异常。
解决方案
调大 PermGen space 参数即可,服务器 -> 应用服务器 ->server1-> 进程定义 ->java 虚拟机,在该页面下面有“通用 JVM 参数”输入框,添加“ -XX:PermSize=512M ”,注意和前面的参数要有空格分割。
建议
我们每次重启时,最好是重启 Websphere 应用服务器,而不是仅仅重启某个应用,这样就不会发生这种现象。 XX:PermSize 参数也不能调得过大,因为这块区域是不受 GC ( Garbage Collection )控制的,所以如果调得太大,对你整个系统的性能会造成影响。
每次打补丁时,最好按正规的打包发布流程,重新启动 Websphere 应用服务器,并重新部署应用。