Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
9.7.0
-
None
Description
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:
Every new websocket connection registers a new instance of this application listener and after a while we ended up with millions of these listeners:
@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(); } }
Instead of creating a new listener for every connection, the listener should be a singleton.
Attachments
Attachments
Issue Links
- is cloned by
-
WICKET-6965 Memory leak in WicketEndpoint
- Resolved