Hi,
during weekend we have been investigating some rather big memory leaks we
have in current WildFly code.
What our research has found out is that we had problems in
- JPA integration
- Validation integration
- undertow / undertow integration
- msc
- resteasy
- hibernate
For now we have fixed most of the issues in integration code which can be
found at
https://github.com/ctomc/wildfly/commits/mem-leak
undertow
https://github.com/undertow-io/undertow/commits/master
msc
https://github.com/jbossas/jboss-msc/commit/1bcdbd0d874a5d5e22ef2a00fa1eb...
RestEasy
https://github.com/resteasy/Resteasy/pull/344
I am not sure for RestEasy fixes and should code be properly fixed by
people that know code bit better.
All this components need new release to be cut before they can be included
into WildFly.
I am not sure if this will hold WildFly Alpha 3 release or not, IMHO it
should.
Also beyond this leaks we also found that we leak somewhere deep in
hibernate integration and properties(or better copy of them) that are
passed as part of JPA initialization remain referenced by hibernate service
loader after application has already been undeployed.
This is problematic as part of this properties are instances of BeanManager
and ValidatorFactory and similar if they would be just primitive values it
would be lesser of issue.
I was unable to find proper place to fix this. So I would like to ask
people that are more familiar with that area to take a look.
This is GC root from Yourkit profile session:
Paths from "GC Roots" to "Object SerializableValidatorFactory
#323736"
+-------------------------------------------------------------------------------------------------------+-----------------+----------------+
|
Name | Retained Size |
Shallow Size |
+-------------------------------------------------------------------------------------------------------+-----------------+----------------+
|
+---org.jboss.as.jpa.validator.SerializableValidatorFactory
| 16 | 16 |
|
|
| | |
| +---value of
java.util.HashMap$Entry
| 64 | 24 |
|
|
| | |
| +---[83] of
java.util.HashMap$Entry[256]
| 4.088 | 1.040 |
|
|
| | |
| +---table of
java.util.HashMap
| 4.152 | 48 |
|
|
| | |
| +---configurationValues of
org.hibernate.boot.registry.internal.StandardServiceRegistryImpl |
15.688 | 24 |
|
|
| | |
| +---serviceRegistry of
org.jboss.as.jpa.hibernate4.JBossAppServerJtaPlatform
| 15.776 | 40 |
|
|
| | |
| +---delegate of
org.jboss.as.jpa.hibernate4.DefaultJtaPlatform
| 16.128 | 352 |
|
|
| | |
| +---[7] of
java.lang.Object[2560]
| 258.520 | 10.256 |
|
|
| | |
| +---elementData of
java.util.Vector |
258.544 | 24 |
|
|
| | |
| +---classes of
org.jboss.modules.ModuleClassLoader
| 518.696 | 80 |
|
|
| | |
| +---referent of
java.util.WeakHashMap$Entry
| 248 | 40 |
|
|
| | |
| +---next of
java.util.WeakHashMap$Entry
| 976 | 40 |
|
|
| | |
| +---[29] of
java.util.WeakHashMap$Entry[32] |
9.720 | 144 |
|
|
| | |
| +---table of
java.util.WeakHashMap |
9.808 | 56 |
|
|
| | |
| +---loaderToCache of java.lang.reflect.Proxy
[Class] | 14.864 | 344 |
+-------------------------------------------------------------------------------------------------------+-----------------+----------------+
I was testing with
http://www.jboss.org/jdf/quickstarts/jboss-as-quickstart/kitchensink-html...
to reproduce it all you need to do is deploy app, undeploy it and
profile app server. There should be no BeanManager & ValidatorFactory
instances laying around.
I would also like to encgurage everyone else to profile their part of code
just to make sure we haven't missed anything.
--
tomaz