JBoss焊接&x2B;java.lang.OutOfMemoryError:PermGen空间
我刚刚切换到Weld来使用CDI JSF 2 Beans+对话范围 以下是我对maven的依赖:JBoss焊接&x2B;java.lang.OutOfMemoryError:PermGen空间,java,jsf,jsf-2,cdi,jboss-weld,Java,Jsf,Jsf 2,Cdi,Jboss Weld,我刚刚切换到Weld来使用CDI JSF 2 Beans+对话范围 以下是我对maven的依赖: <dependency> <groupId>org.jboss.weld.servlet</groupId> <artifactId>weld-servlet</artifactId> <version>1.0.1-Final</version>
<dependency>
<groupId>org.jboss.weld.servlet</groupId>
<artifactId>weld-servlet</artifactId>
<version>1.0.1-Final</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
org.jboss.weld.servlet
焊接servlet
1.0.1-最终版本
罐子
编译
以下是my web.xml中的条目:
<listener>
<listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
</listener>
org.jboss.weld.environment.servlet.Listener
我立即注意到的一件事是,我只需要重新加载tomcat 7两次,而java.lang.OutOfMemoryError:PermGen space
将显示在catalina.out日志文件中
在使用Weld之前,我可以在没有java.lang.OutOfMemoryError的情况下安全地重新加载tomcat 7 10次以上。我原以为在catalina.sh中增加Xmx选项会有所帮助,但以我的经验,这并没有起到作用<代码>JAVA_OPTS=-Xmx1024m
这正常吗?尝试设置permsize:
-XX:MaxPermSize=200m
。您可能正在加载大量的类定义,因此填充了永久的生成空间 这确实是一个非常典型的错误,当您想要使用一个简单的servletcontainer(它不是为此而设计的)进行JavaEE时;)
不,只是开玩笑。Tomcat附带的默认permgen设置只有64MB。其中,类
定义(即执行类#forName()
时得到的任何内容)存储在那里。粗略地说,Weld扫描类路径中的每个JAR和类以找到注释,这样它就可以通过编程创建布线配置的内存映射(在注释之前,这通常是通过XML文件实现的)。然而,在类路径中有很多类,并且加载了那么多的类,在permgen空间中为Tomcat的热部署留下了很少的空间
有几种方法可以解决这个问题。最合乎逻辑的方法是增加永久发电机空间。可以将其设置为VM参数。256MB是一个良好的开端
-XX:MaxPermSize=256m
如果您是从Eclipse内部使用Tomcat,则需要通过双击Servers视图中的server条目、单击OpenLaunchConfiguration链接、单击Arguments选项卡,然后将其(以空格分隔)添加到VM Arguments字段来进行设置
此外,您还可以强制JVM更节省地使用permgen空间。默认情况下,其中的对象很少卸载。添加以下VM参数
-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled
另见:
这当然不正常。但是除非你在代码中做一些挖掘并找到消耗内存的部分,否则绝对不可能确定是你的代码还是实现本身…@jan groth:我不认为这是我的代码,因为这是一个非常简单的测试项目,比如带计数器的jsf bean等等。在使用weld之前,我使用的是spring或默认的jsf托管bean,它们都很好。JAVA\u OPTS=-Xmx1024m
不会增加Permgen<代码>-XX:MaxPermSize=256m没有。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:weld="http://jboss.org/schema/weld/beans"
xsi:schemaLocation="
http://java.sun.com/xml/ns/javaee http://docs.jboss.org/cdi/beans_1_0.xsd
http://jboss.org/schema/weld/beans http://jboss.org/schema/weld/beans_1_1.xsd">
<weld:scan>
<!-- Don't deploy the classes for the swing app! -->
<weld:exclude name="com.acme.swing.**" />
<!-- Don't include GWT support if GWT is not installed -->
<weld:exclude name="com.acme.gwt.**">
<weld:if-class-available name="!com.google.GWT"/>
</weld:exclude>
<!--
Exclude classes which end in Blether if the system property verbosity is set to low
i.e. java ... -Dverbosity=low
-->
<weld:exclude pattern="^(.*)Blether$">
<weld:if-system-property name="verbosity" value="low"/>
</weld:exclude>
<!--
Don't include JSF support if Wicket classes are present, and the viewlayer system
property is not set
-->
<weld:exclude name="com.acme.jsf.**">
<weld:if-class-available name="org.apahce.wicket.Wicket"/>
<weld:if-system-property name="!viewlayer"/>
</weld:exclude>
</weld:scan>
</beans>