Uploaded image for project: 'TomEE'
  1. TomEE
  2. TOMEE-1649

Websockets Memory Leak

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Blocker
    • Resolution: Fixed
    • Affects Version/s: 1.7.2, 1.7.3
    • Fix Version/s: 7.0.0-M2
    • Component/s: TomEE Core Server
    • Labels:
      None

      Description

      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.

      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");
      	}
      }
      

      Amend the ws://localhost:8080/WebsockMemleak/ws url in the source below, to match your context root / port number.

      index.html
      <html>
      <script>
      var ws = new WebSocket("ws://localhost:8080/WebsockMemleak/ws");
      
      
      window.onbeforeunload = function(){
      	ws.close();
      }
      
      </script>
      </html>
      

        Attachments

          Activity

            People

            • Assignee:
              romain.manni-bucau Romain Manni-Bucau
              Reporter:
              tonywestonuk Tony Weston
            • Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: