[ 
https://issues.apache.org/jira/browse/WICKET-6965?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17510844#comment-17510844
 ] 

ASF GitHub Bot commented on WICKET-6965:
----------------------------------------

martin-g commented on pull request #505:
URL: https://github.com/apache/wicket/pull/505#issuecomment-1075546529


   Good catch!
   I've simplified it!


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@wicket.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


> 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.8.0
>            Reporter: Thomas Heigl
>            Assignee: Martin Tzvetanov Grigorov
>            Priority: Major
>         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