[
https://issues.apache.org/jira/browse/TOMEE-1649?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Romain Manni-Bucau resolved TOMEE-1649.
---------------------------------------
Resolution: Fixed
Assignee: Romain Manni-Bucau
Fix Version/s: 7.0.0-M2
Has been fixed thanks to a change in tomcat websocket lifecycle handling.
> Websockets Memory Leak
> ----------------------
>
> Key: TOMEE-1649
> URL: https://issues.apache.org/jira/browse/TOMEE-1649
> Project: TomEE
> Issue Type: Bug
> Components: TomEE Core Server
> Affects Versions: 1.7.2, 1.7.3
> Reporter: Tony Weston
> Assignee: Romain Manni-Bucau
> Priority: Blocker
> Fix For: 7.0.0-M2
>
>
> Websocket sessions are not GC'd on close. This will quickly lead to
> out-of-memory condition, and server hang. I have marked this is a blocker as
> any application that uses Websockets will have this issue, and there is no
> workaround; it is not a corner case.
> To reproduce, create a Websocket handler, and index.html to create the
> socket. See below. Load index.html in a browser, and refresh the page
> several times.
> Using VisualVM (or other memory profiler), search for websocket in the heap
> dump. You should find that every refresh of the page will cause an
> additional instance of WsSession, and other supporting classes.
> These instances are referenced by org.apache.openejb.core.WebContext /
> creationalContexts, and do not appear to be removed when the websocket is
> closed.
> {code:title=MyWebsocket.java}
> import javax.enterprise.context.ApplicationScoped;
> import javax.websocket.OnClose;
> import javax.websocket.OnOpen;
> import javax.websocket.Session;
> import javax.websocket.server.ServerEndpoint;
> @ServerEndpoint(value = "/ws")
> public class MyWebsocket {
> @OnOpen
> public void wsOpen(Session session){
> System.out.println("WS Opened");
> }
>
> @OnClose
> public void wsClosed(Session session){
> System.out.println("WS Closed");
> }
> }
> {code}
> Amend the ws://localhost:8080/WebsockMemleak/ws url in the source below, to
> match your context root / port number.
> {code:title=index.html}
> <html>
> <script>
> var ws = new WebSocket("ws://localhost:8080/WebsockMemleak/ws");
> window.onbeforeunload = function(){
> ws.close();
> }
> </script>
> </html>
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)