Hello,
thank you for your reply!!
As far as my experience goes I have seen that an OutOfMemoryError stacktrace never gives a clue about what is causing the out of memory itself. In fact it could be any thread that was in need of memory, could be the database driver or a HTTP request...
As soon as the JVM is out of memory we get the error in many places, this is just one example:
Code:
java.lang.OutOfMemoryError: Java heap space
at java.io.BufferedOutputStream.<init>(BufferedOutputStream.java:59)
at java.io.BufferedOutputStream.<init>(BufferedOutputStream.java:42)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:642)
at java.lang.Thread.run(Thread.java:595)
Our JVM is generating Heap-Dumps as soon as the error occurs by running our JVM with "-XX:+HeapDumpOnOutOfMemoryError". A Heapdump analysis usually brings more information.
This brings me to my assumption that the StandardBeanExpressionResolver is not cleaning its cache. When analysing the Heapdump, the biggest object is:
Code:
org.springframework.beans.factory.support.DefaultListableBeanFactory @ 0xd1fa8578
Shallow Size: 200 B Retained Size: 543,4 MB
Looking at in in Detail (scroll to the right for size information!):
Code:
Class Name | Shallow Heap | Retained Heap
------------------------------------------------------------------------------------------------------------------------------------------------------------------
org.springframework.beans.factory.support.DefaultListableBeanFactory @ 0xd1fa8578 | 200 | 569.825.696
|- <class> class org.springframework.beans.factory.support.DefaultListableBeanFactory @ 0xf0dd6e40 | 8 | 1.584
|- beanClassLoader org.jboss.web.tomcat.service.WebAppClassLoader @ 0xd1d3a118 | 176 | 47.024
|- frozenBeanDefinitionNames java.lang.String[170] @ 0xd2185e78 | 696 | 696
|- disposableBeans java.util.LinkedHashMap @ 0xd29bf470 | 48 | 39.840
|- aliasMap java.util.concurrent.ConcurrentHashMap @ 0xd2b8bc90 | 40 | 1.544
|- singletonObjects java.util.concurrent.ConcurrentHashMap @ 0xd2b8bcb8 | 40 | 737.280
|- singletonFactories java.util.HashMap @ 0xd2b8bce0 | 40 | 120
|- earlySingletonObjects java.util.HashMap @ 0xd2b8bd08 | 40 | 120
|- containedBeanMap java.util.concurrent.ConcurrentHashMap @ 0xd2b8bd30 | 40 | 17.928
|- dependentBeanMap java.util.concurrent.ConcurrentHashMap @ 0xd2b8bd58 | 40 | 31.880
|- dependenciesForBeanMap java.util.concurrent.ConcurrentHashMap @ 0xd2b8bd80 | 40 | 27.528
|- factoryBeanObjectCache java.util.concurrent.ConcurrentHashMap @ 0xd2b8bda8 | 40 | 3.600
|- customEditors java.util.HashMap @ 0xd2b8bdd0 | 40 | 112
|- scopes java.util.HashMap @ 0xd2b8bdf8 | 40 | 256
|- mergedBeanDefinitions java.util.concurrent.ConcurrentHashMap @ 0xd2b8be20 | 40 | 387.048
|- embeddedValueResolvers java.util.LinkedList @ 0xd2bae7c0 | 24 | 4.576
|- beanPostProcessors java.util.ArrayList @ 0xd2bae7d8 | 24 | 80
|- logger org.apache.commons.logging.impl.Log4JLogger @ 0xd2bb1590 | 16 | 240
|- registeredSingletons java.util.LinkedHashSet @ 0xd2bb15b0 | 16 | 4.800
|- singletonsCurrentlyInCreation java.util.Collections$SynchronizedSet @ 0xd2bb15c0 | 16 | 152
|- propertyEditorRegistrars java.util.LinkedHashSet @ 0xd2bb15d0 | 16 | 176
|- alreadyCreated java.util.Collections$SynchronizedSet @ 0xd2bb15e0 | 16 | 2.160
|- prototypesCurrentlyInCreation org.springframework.core.NamedThreadLocal @ 0xd2bb15f0 | 24 | 24
|- serializationId java.lang.String @ 0xd2bb30d0 org.springframework.web.context.WebApplicationContext:/batch-startup | 24 | 176
|- instantiationStrategy org.springframework.beans.factory.support.CglibSubclassingInstantiationStrategy @ 0xd2c37f88 | 8 | 8
|- parameterNameDiscoverer org.springframework.core.LocalVariableTableParameterNameDiscoverer @ 0xd2c37f98 | 16 | 68.608
|- ignoredDependencyTypes java.util.HashSet @ 0xd2c37fa8 | 16 | 152
|- ignoredDependencyInterfaces java.util.HashSet @ 0xd2c37fb8 | 16 | 368
|- factoryBeanInstanceCache java.util.concurrent.ConcurrentHashMap @ 0xd2dbd040 | 40 | 6.144
|- filteredPropertyDescriptorsCache java.util.HashMap @ 0xd2dbd068 | 40 | 3.152
|- resolvableDependencies java.util.HashMap @ 0xd2dbd090 | 40 | 328
|- beanDefinitionMap java.util.concurrent.ConcurrentHashMap @ 0xd2dbd0b8 | 40 | 216.424
|- autowireCandidateResolver org.springframework.beans.factory.annotation.QualifierAnnotationAutowireCandidateResolver @ 0xd2dc2c20| 24 | 232
|- beanDefinitionNames java.util.ArrayList @ 0xd2dc2c38 | 24 | 840
|- beanExpressionResolver org.springframework.context.expression.StandardBeanExpressionResolver @ 0xd2eedf48 | 32 | 567.763.320
'- Total: 35 entries | |
------------------------------------------------------------------------------------------------------------------------------------------------------------------
The beanExpressionResolver (StandardBeanExpressionResolver ) is extremely big..
In my next post I will add the details for this, as posts are limited to 1000 chars.