1 JBoss deploy 出现 OutOfMemoryError : PermGen space
答:
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。说说为什么会内存益出:这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。
改正方法,在 run.bat 中加入:-Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
因为项目中引用了很多的 jar 包,而这些 jar 包中的 class 信息会被 JBoss 的 class loader 加载到 PermGen space 区域,在 JVM 默认的情况下,该部分空间的大小只有 4M,在 jar 包非常多的情况下,显然是不够用的,所以通过 -XX:MaxPermSize=256m 指定最大值后即可解决问题。
另外,如果 heap 内存不足出现 java.lang.OutOfMemoryError: Java heap space 时,可以通过 -Xmx512m 指定最大 heap 内存来解决这样的问题。
 
2 将JBoss启动做成Windows的系统服务
这里将用到JavaService.exe 这个程序将JBoss启动做成Windows的系统服务。
第一步:下载jboss-4.2.2,并安装到某一个目录下.
第二步: 复制 JavaService.exe 文件到%JBOSS_HOME%\bin目录下;
       如果没有JavaService.exe 可以在 [url]http://javaservice.objectweb.org/[/url] 网站上下载;
第三步: 设置环境变量:
       将JAVA_HOME设置成jdk的目录,例如:D:\develop\java\jdk1.6.0
       将JBOSS_HOME设置成JBOSS的目录,例如:D:\Develop\jboss-4.2.0.GA
注意:在环境变量中目录不能有空格,否则会造成服务无法启动。
第三步: 通过Windows的运行“cmd”或者“command”打开dos运行窗口;进入“%JBOSS_HOME%\bin”路径;
JavaService.exe -install JBoss %Java_Home%\jre\bin\server\jvm.dll -Djava.class.path="%JBOSS_HOME%\bin\run.jar;%JAVA_HOME%\lib\tools.jar" -Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m -start org.jboss.Main -params -c default -Djboss.bind.address=0.0.0.0 -stop org.jboss.Main -method systemExit -out "%JBOSS_HOME%\server\default\log\out.log" -err "%JBOSS_HOME%\server\default\log\err.log" -current "%JBOSS_HOME%\bin" -overwrite -startup 6
运行后,将会提示:“The JBoss automatic service war successfully installed”,提示服务安装完成,可以在Windows的服务管理列表中找到名称为“JBoss”的服务。输入:“net start JBoss”启动服务,服务启动可能需要一定时间,打开新的IE浏览器在地址栏输入: [url]http://localhost:8080[/url] 会有提示页面,表示服务启动成功。
注意:如何卸载服务:在dos命令窗口输入:“JavaService.exe –uninstall 服务名称(一般是jboss)”
另外此方法也使用于其他的服务,需要在第四步时更改相应的参数。
 
3 修改端口
D:\jboss-4.2.2.GA\server\default\deploy\jboss-web.deployer\server.xml
 
4 修改上下文根
WEB-INF中加入文件jboss-web.xml,内容如下:
<?xml version='1.0' encoding='UTF-8' ?>  
  <!DOCTYPE jboss-web 
     PUBLIC "-//JBoss//DTD Web Application 2.3V2//EN" 
     " [url]http://www.jboss.org/j2ee/dtd/jboss-web_3_2.dtd[/url]">  
 <jboss-web> 
     <context-root>/</context-root>     
     <virtual-host>[url]www.enAny.cn</virtual-host>  [/url]
 </jboss-web> 
 
5 jboss 无法用本机ip地址访问,只能用localhost或127.0.0.1访问?
答:JBOSS4.2以上版本服务启动如果不加任何参数的话,只监听127.0.0.1,就是说只能用127.0.0.1或者localhost访问,用本机的对外地址访问不了,同一网络内别的机子没法访问。除非你用参数-b   ip地址   来绑定监听的地址才可以。
这和以前版本的JBOSS不一样,以前版本的不加任何参数是监听本机所有的IP地址,现在必须使用参数-b   0.0.0.0才可以监听全部地址。
方法1:run -c default -Djboss.bind.address=0.0.0.0
方法2:run -b 10.16.82.87
6 如何run -c all启动呢?
已经把jboss做成了windows里面的服务,但是如何run -c all启动呢?我找了很久,最终在别人的文章的参数栏中发现了。在
InstallJBoss.bat文件中的参数-start org.jboss.Main 后面加上 -params -c all这样的话,就行了,如果要用minimal方式,就把-c all改成-c minimal就行了。
 
7 WEB部署目录
D:\dfweb\jboss-4.2.2.GA\server\default\deploy\jboss-web.deployer
 
8 JBOSS缓存
tomcat的缓存是在tomcat\work\Catalina\localhost目录
jboss的缓存是在JBoss\server\default\work\jboss.web\localhost目录