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

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

theigl opened a new pull request, #507:
URL: https://github.com/apache/wicket/pull/507

   This PR stores the application name in a field when a websocket connection 
is opened, so we don't have to access the session during `onClose` and 
`onError`. When `onError` is called, the session may already be closed and 
request parameters can no longer be accessed.
   
   
https://issues.apache.org/jira/browse/WICKET-6965?focusedCommentId=17516488&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-17516488




> 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
>             Fix For: 10.0.0, 8.14.0, 9.9.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