我开发Web应用程序并且使用jBoss 4.0.2,当我使用eclipse多次重新部署我的WAR时,jBoss会因为内存不足而崩溃。当我必须将新版本安装到生产环境时,它将消耗生产服务器内存,这意味着我必须停止jBoss以防止从客户服务器重新部署内存。有没有解决这个问题的工作?
答案 0 :(得分:5)
基本上没有。由于JBoss类加载器的工作方式,每个部署都会占用一大块PermGen,即使取消部署应用程序也不会发布。
您可以通过将PermGen内存池大小增加到几百兆(甚至是演出)来缓解症状,这使问题更容易使用。我还发现减少代码中静态字段的使用(特别是引用大对象的静态字段)可以减少对PermGen的影响。
理想情况下,我不会在生产中使用热部署,而是关闭服务器,替换WAR / EAR,然后重新启动它。
答案 1 :(得分:0)
我不确定它是否已链接,但我怀疑它是 - 就实现应用程序分离而言,JBoss不符合J2EE标准,因为它是开箱即用的。
实际上,有一个一个类加载器,所有类都放在其中,因此无法卸载类,因此您将遇到此问题。在这方面,您可以将jboss配置为更符合J2EE。
你是否得到了“内存不足”或者你是否经常出现内存不足?
我还通过将JProfiler连接到它并使用它来检查内存使用情况来取得进展。
我最终只是简单地重启Jboss - 没花太多时间。
答案 2 :(得分:0)
试试这个(适用于Sun的Java):
-XX:+ UseConcMarkSweepGC -XX:+ CMSPermGenSweepingEnabled -XX:+ CMSClassUnloadingEnabled -XX:MaxPermSize参数=128米
CMS实际上可以GC永久生成堆(您的类所在的堆)。设置MaxPermSize是不必要的,但应用程序服务器的默认值为低。