[ https://issues.apache.org/jira/browse/MYFACES-4722?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17950097#comment-17950097 ]
Paul Pogonyshev commented on MYFACES-4722: ------------------------------------------ > I think it is WildFly specific – the dump looks much different. Many more > references than in Liberty. The question is _why_ WildFly adds those references. I suspect that MyFaces tells it somehow. As I understand, these managed beans are specific to MyFaces (or JSF?), so for WildFly to even know about them, something from it has to be called via some public interface. Maybe Liberty doesn't even have such an interface. Anyway... > 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)