Martin Tzvetanov Grigorov created WICKET-6965:
-------------------------------------------------

             Summary: Memory leak in WicketEndpoint
                 Key: WICKET-6965
                 URL: https://issues.apache.org/jira/browse/WICKET-6965
             Project: Wicket
          Issue Type: Bug
          Components: wicket-native-websocket
    Affects Versions: 9.7.0
            Reporter: Thomas Heigl
            Assignee: Martin Tzvetanov Grigorov
             Fix For: 10.0.0, 8.14.0, 9.8.0
         Attachments: image-2022-01-10-18-52-42-193.png, 
image-2022-03-21-16-27-37-798.png

Our application OOMed yesterday after about 2-3 weeks of continuous uptime. We 
normally deploy every other day, so we never noticed this issue before.

The heap dump identified the possible culprit as 
{{{}WicketEndpoint$ApplicationListener{}}}:

!image-2022-01-10-18-52-42-193.png!

Every new websocket connection registers a new instance of this application 
listener and after a while we ended up with millions of these listeners:
{code:java}
@Override
public void onOpen(Session session, EndpointConfig endpointConfig)
{
    String appName = getApplicationName(session);

    WebApplication app = (WebApplication) WebApplication.get(appName);
    app.getApplicationListeners().add(new 
ApplicationListener(applicationDestroyed));

    try
    {
        ThreadContext.setApplication(app);
        javaxWebSocketProcessor = new JavaxWebSocketProcessor(session, app, 
endpointConfig);
    }
    finally
    {
        ThreadContext.detach();
    }
}
{code}
Instead of creating a new listener for every connection, the listener should be 
a singleton.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to