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=<st1:chmetcnv tcsc="0" hasspace="False" sourcevalue="512" negative="False" numbertype="1" unitname="m" w:st="on">512M</st1:chmetcnv>”,注意和前面的参数要有空格分割。
建议
我们每次重启时,最好是重启Websphere应用服务器,而不是仅仅重启某个应用,这样就不会发生这种现象。XX:PermSize参数也不能调得过大,因为这块区域是不受GC(Garbage Collection)控制的,所以如果调得太大,对你整个系统的性能会造成影响。
每次打补丁时,最好按正规的打包发布流程,重新启动Websphere应用服务器,并重新部署应用。