以前用jboss 4.2时用javaservice将jboss设置成windows服务,本次服务器升级,系统windows server2008 r2,jboss升级到当前稳定版本5.1.0,安装过程相当简单,设置成windows服务也不是什么难事儿,如果已把jboss的bin目录加入到系统PATH下,只需在命令提示符下输入service install,系统就会提示windows 服务安装成功,卸载windows服务的命令也很简单:service uninstall。
在没有部署任何应用情况下,进入windows服务,找到Jboss Application Server 5.0,点击启动,如果去浏览器里访问,这时你会发现你的windows服务已经安装成功。问题是一旦部署应用,尤其是包含很多jar文件的应用,这时再启动windows service时,如果按照预想的去访问你的应用你会发现错误信息中包java.lang.OutOfMemoryError: PermGen space这样的错误,很显然是内存不足,网上也有不少人提出了解决办法,但大多是描述了在tomcat和cmd:run下的解决办法,唯独没有提到作为windows service如何解决,于是就去jboss去找原因,还好在其bug报告页面找到了答案,大概意思就是如果按照默认配置将jboss设置为windows service,则在系统启动时引起CPU的占用率达到100%,从而爆出Out of memory的错误,原因呢就是在%JBOSS_HOME%\bin\service.bat文件里第26行:
REM Suppress killing service on logoff event
set JAVA_OPTS=-Xrs
设置错误,给出的解决办法是将其改为:
set JAVA_OPTS=-Xrs -Dfile.encoding=UTF-8 -Djboss.vfs.forceVfsJar=true -Dorg.jboss.logging.Log4jService.catchSystemOut=false -Duser.timezone=GMT -Xmx1024m -XX:MaxPermSize=512m
这样就正常了,大概看一下之所以报错,是Jboss默认系统没有设置JAVA_OPTS,一旦在启动阶段找到其他地方设置的JAVA_OPTS值,这时的-Xrs就会被覆盖,从而引起OutOfMemory错误,其实还可以这样改:
set JAVA_OPTS=-Xrs %JAVA_OPTS%