[ https://issues.apache.org/jira/browse/MYFACES-4722?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17950120#comment-17950120 ]
Volodymyr Siedlecki edited comment on MYFACES-4722 at 5/7/25 9:03 PM: ---------------------------------------------------------------------- {code:java} I think we need to ask the WildFly team about ConcurrentReferenceHashMap. It's holding onto the remaining references (as a key), thus causing a leak. Class Name | Referenced Objects | Shallow Heap | Ref. Shallow Heap | Retained Heap --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- <Java Local> org.apache.myfaces.config.annotation.Tomcat7AnnotationLifecycleProvider '- instanceManagers java.util.WeakHashMap '- table java.util.WeakHashMap$Entry[16] '- [0] java.util.WeakHashMap$Entry '- value org.wildfly.extension.undertow.deployment.UndertowJSPInstanceManager '- webInjectionContainer org.jboss.as.web.common.CachingWebInjectionContainer '- references org.jboss.as.web.common.ConcurrentReferenceHashMap '- segments org.jboss.as.web.common.ConcurrentReferenceHashMap$Segment[16] '- [8] org.jboss.as.web.common.ConcurrentReferenceHashMap$Segment '- table org.jboss.as.web.common.ConcurrentReferenceHashMap$HashEntry[16] '- [12] org.jboss.as.web.common.ConcurrentReferenceHashMap$HashEntry '- keyRef foo.ManagedBean$Unscoped ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------{code} was (Author: volosied): {code:java} I think we need to ask the WildFly team about ConcurrentReferenceHashMap. It's holding onto the remaining references, thus causing a leak. Class Name | Referenced Objects | Shallow Heap | Ref. Shallow Heap | Retained Heap --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- <Java Local> org.apache.myfaces.config.annotation.Tomcat7AnnotationLifecycleProvider '- instanceManagers java.util.WeakHashMap '- table java.util.WeakHashMap$Entry[16] '- [0] java.util.WeakHashMap$Entry '- value org.wildfly.extension.undertow.deployment.UndertowJSPInstanceManager '- webInjectionContainer org.jboss.as.web.common.CachingWebInjectionContainer '- references org.jboss.as.web.common.ConcurrentReferenceHashMap '- segments org.jboss.as.web.common.ConcurrentReferenceHashMap$Segment[16] '- [8] org.jboss.as.web.common.ConcurrentReferenceHashMap$Segment '- table org.jboss.as.web.common.ConcurrentReferenceHashMap$HashEntry[16] '- [12] org.jboss.as.web.common.ConcurrentReferenceHashMap$HashEntry '- keyRef foo.ManagedBean$Unscoped ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------{code} > Memory leak when using unscoped managed beans > --------------------------------------------- > > Key: MYFACES-4722 > URL: https://issues.apache.org/jira/browse/MYFACES-4722 > Project: MyFaces Core > Issue Type: Bug > Components: General > Affects Versions: 2.3.11 > Environment: Linux + WildFly > Reporter: Paul Pogonyshev > Assignee: Volodymyr Siedlecki > Priority: Major > Attachments: image-2025-05-07-11-29-07-479.png, > image-2025-05-07-13-29-24-689.png, image-2025-05-07-13-29-49-641.png, > image-2025-05-07-13-31-03-098.png, myfaces-memory-leak.tar.gz > > > When a managed bean is instantiated by MyFaces, it gets registered in some > deployment-global map. I'm not sure about the interface involved, on WildFly > it boils down to `CachingWebInjectionContainer`. When the bean's scope > (request, session, etc.) is closed, the bean is removed from this map. > However, if the bean has no scope associated, it seems to never get removed, > essentially leaking memory. If the bean is large or references lots of > objects, this eventually leads to OOM situation. We have observed this in > practice. > I created a simple reproducer project. I only tested with MyFaces 2.3 and > WildFly 26, but the bug might also be present in newer versions as well (it > is simply not easy for me to test as I used the same setup as for our real > project). > To reproduce: > * unpack the project; > * build it (`./gradlew clean build`); > * deploy on WildFly; > * visit the page (sth. like > `http://localhost:8080/myfaces-memory-leak/test.jsf`); > * refresh about 10-20 times (depends on WildFly settings etc.); > * eventually OOM is triggered. > You also don't have to wait for OOM. If you check server output (stdout) you > can see text like this: > NEW MANAGED BEAN: request #0 > NEW MANAGED BEAN: unscoped #1 > NEW MANAGED BEAN: unscoped #2 > NEW MANAGED BEAN: request #3 > GARBAGE-COLLECTED: request #0 > NEW MANAGED BEAN: unscoped #4 > NEW MANAGED BEAN: unscoped #5 > NEW MANAGED BEAN: request #6 > GARBAGE-COLLECTED: request #3 > ... > I.e. managed beans with request scope get allocated and then > garbage-collected. However, beans without associated scope never get > garbage-collected because they are still reachable in memory. -- This message was sent by Atlassian Jira (v8.20.10#820010)