Paul Pogonyshev created MYFACES-4722: ----------------------------------------
Summary: 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 Attachments: 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)