-
Feb 10th, 2008, 02:04 PM
#1
Issue with permgen, out of memory errors; Spring / Hibernate
Up to this point, I have been ignoring these errors, but it hurting my development. Basically, whenever I reload my web application (eg. through updating the configuration), I get out of memory errors, over time. For example, if I change my configuration files and the web application container restarts, after about the 3rd or 4th iteration, my server will crash.
I am just guessing that there is some kind of memory leak and that when the container tries to close the web application, that it doesn't clear up any objects. I am assuming most of the issues are on the hibernate end, but possibly at the spring end. It is kind of a medium sized application with 40 tables.
Possible Solutions:
1. Increase the amount of memory at startup (I could do this, but I would like to see if there is some configuration I could set).
I am using Spring 2 (I think a 2006 release).
Tomcat 5.5.26.
MySQL5
Some of the hibernate config:
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQ LDialect</prop>
<!-- Botlist default for show_sql should be 'false' -->
<!-- You may also have to disable the "FORMAT SQL" in the log4j settings -->
<!-- ============================================= -->
<prop key="hibernate.show_sql">false</prop>
<!-- Botlist default for format_sql should be 'false' -->
<prop key="hibernate.format_sql">false</prop>
<prop key="hibernate.generate_statistics">false</prop>
<!-- ============================================= -->
<!-- Caching Properties -->
<prop key="hibernate.cache">true</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.cache.provider_class">net.sf.ehcach e.hibernate.EhCacheProvider</prop>
<!-- Connection Pooling Properties -->
<prop key="hibernate.c3p0.minPoolSize">3</prop>
<prop key="hibernate.c3p0.maxPoolSize">10</prop>
<prop key="hibernate.timeout">1800</prop>
</props>
</property>
Some of the error.
java.lang.OutOfMemoryError: PermGen space
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java :620)
at java.security.SecureClassLoader.defineClass(Secure ClassLoader.java:124)
at org.apache.catalina.loader.WebappClassLoader.findC lassInternal(WebappClassLoader.java:1847)
at org.apache.catalina.loader.WebappClassLoader.findC lass(WebappClassLoader.java:873)
at org.apache.catalina.loader.WebappClassLoader.loadC lass(WebappClassLoader.java:1326)
at org.apache.catalina.loader.WebappClassLoader.loadC lass(WebappClassLoader.java:1205)
at java.lang.ClassLoader.loadClassInternal(ClassLoade r.java:319)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java :620)
at java.security.SecureClassLoader.defineClass(Secure ClassLoader.java:124)
at org.apache.catalina.loader.WebappClassLoader.findC lassInternal(WebappClassLoader.java:1847)
at org.apache.catalina.loader.WebappClassLoader.findC lass(WebappClassLoader.java:873)
at org.apache.catalina.loader.WebappClassLoader.loadC lass(WebappClassLoader.java:1326)
at org.apache.catalina.loader.WebappClassLoader.loadC lass(WebappClassLoader.java:1205)
at java.lang.ClassLoader.loadClassInternal(ClassLoade r.java:319)
at org.springframework.orm.hibernate3.HibernateTransa ctionManager.afterPropertiesSet(HibernateTransacti onManager.java:369)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.invokeInitMethods(Abstr actAutowireCapableBeanFactory.java:1062)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.initializeBean(Abstract AutowireCapableBeanFactory.java:1029)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.createBean(AbstractAuto wireCapableBeanFactory.java:420)
at org.springframework.beans.factory.support.Abstract BeanFactory$1.getObject(AbstractBeanFactory.java:2 45)
at org.springframework.beans.factory.support.DefaultS ingletonBeanRegistry.getSingleton(DefaultSingleton BeanRegistry.java:141)
at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:242)
at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:156)
at org.springframework.beans.factory.support.DefaultL istableBeanFactory.preInstantiateSingletons(Defaul tListableBeanFactory.java:290)
at org.springframework.context.support.AbstractApplic ationContext.refresh(AbstractApplicationContext.ja va:348)
at org.springframework.web.context.support.AbstractRe freshableWebApplicationContext.refresh(AbstractRef reshableWebApplicationContext.java:156)
at org.springframework.web.context.ContextLoader.crea teWebApplicationContext(ContextLoader.java:246)
at org.springframework.web.context.ContextLoader.init WebApplicationContext(ContextLoader.java:184)
at org.springframework.web.context.ContextLoaderListe ner.contextInitialized(ContextLoaderListener.java: 49)
at org.apache.catalina.core.StandardContext.listenerS tart(StandardContext.java:3764)
at org.apache.catalina.core.StandardContext.start(Sta ndardContext.java:4216)
2008-02-10 19:59:23,115 ERROR [org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/botlist]] - <Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListe ner>
org.springframework.beans.factory.BeanCreationExce ption: Error creating bean with name 'transactionManager' defined in ServletContext resource [/WEB-INF/botlistings-servlet.xml]: Invocation of init method failed; nested exception is java.lang.OutOfMemoryError: PermGen space
Caused by:
java.lang.OutOfMemoryError: PermGen space
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java :620)
at java.security.SecureClassLoader.defineClass(Secure ClassLoader.java:124)
at org.apache.catalina.loader.WebappClassLoader.findC lassInternal(WebappClassLoader.java:1847)
at org.apache.catalina.loader.WebappClassLoader.findC lass(WebappClassLoader.java:873)
at org.apache.catalina.loader.WebappClassLoader.loadC lass(WebappClassLoader.java:1326)
at org.apache.catalina.loader.WebappClassLoader.loadC lass(WebappClassLoader.java:1205)
at java.lang.ClassLoader.loadClassInternal(ClassLoade r.java:319)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java :620)
at java.security.SecureClassLoader.defineClass(Secure ClassLoader.java:124)
at org.apache.catalina.loader.WebappClassLoader.findC lassInternal(WebappClassLoader.java:1847)
at org.apache.catalina.loader.WebappClassLoader.findC lass(WebappClassLoader.java:873)
at org.apache.catalina.loader.WebappClassLoader.loadC lass(WebappClassLoader.java:1326)
at org.apache.catalina.loader.WebappClassLoader.loadC lass(WebappClassLoader.java:1205)
at java.lang.ClassLoader.loadClassInternal(ClassLoade r.java:319)
at org.springframework.orm.hibernate3.HibernateTransa ctionManager.afterPropertiesSet(HibernateTransacti onManager.java:369)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.invokeInitMethods(Abstr actAutowireCapableBeanFactory.java:1062)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.initializeBean(Abstract AutowireCapableBeanFactory.java:1029)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.createBean(AbstractAuto wireCapableBeanFactory.java:420)
at org.springframework.beans.factory.support.Abstract BeanFactory$1.getObject(AbstractBeanFactory.java:2 45)
at org.springframework.beans.factory.support.DefaultS ingletonBeanRegistry.getSingleton(DefaultSingleton BeanRegistry.java:141)
at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:242)
at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:156)
at org.springframework.beans.factory.support.DefaultL istableBeanFactory.preInstantiateSingletons(Defaul tListableBeanFactory.java:290)
at org.springframework.context.support.AbstractApplic ationContext.refresh(AbstractApplicationContext.ja va:348)
at org.springframework.web.context.support.AbstractRe freshableWebApplicationContext.refresh(AbstractRef reshableWebApplicationContext.java:156)
at org.springframework.web.context.ContextLoader.crea teWebApplicationContext(ContextLoader.java:246)
at org.springframework.web.context.ContextLoader.init WebApplicationContext(ContextLoader.java:184)
at org.springframework.web.context.ContextLoaderListe ner.contextInitialized(ContextLoaderListener.java: 49)
at org.apache.catalina.core.StandardContext.listenerS tart(StandardContext.java:3764)
at org.apache.catalina.core.StandardContext.start(Sta ndardContext.java:4216)
Feb 10, 2008 7:59:23 PM org.apache.catalina.core.StandardContext start
SEVERE: Error listenerStart
Feb 10, 2008 7:59:23 PM org.apache.catalina.core.StandardContext start
SEVERE: Context [/botlist] startup failed due to previous errors
2008-02-10 19:59:23,131 INFO [org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/botlist]] - <Closing Spring root WebApplicationContext>
-
Feb 11th, 2008, 12:35 AM
#2
This might be due to using CGLIB. Both Hibernate and Spring (when using class-based proxies only) utilize this library to dynamically generate classes at runtime. These will fill up the perm gen space and eventually cause an out of memory error.
So if this happens quite early, I suggest to check where CGLIB-proxies are used. If created by Spring I suggest switching to Java-Reflection proxies (based on interfaces) instead.
Regards,
Andreas
-
Feb 11th, 2008, 12:37 AM
#3
It is a known issue with Tomcat and sun JDK's especially if you also use commons-logging. There are some static references to classloaders which make it impossible to clean all the used resources, in the end you will have x instances (depending on the number of redeployments) of your app in memory.
Use Google and you might find some solutions.
And as Andreas pointed out depending on which type of proxies you use you run out of memory faster.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules