QUESTION:
I'm looking for some advice on what Tomcat NIO connector settings to use to
support 100K concurrent websocket connections. Hopefully I can reach this
goal through a combination of Tomcat NIO Connector settings, and Server 2008 R2
configuration [if needed].
BACKGROUND:
We're scale testing our websocket application and looking to see how many
concurrent websocket connections we can get on a single Tomcat instance - with
the goal being 100K. I've provided the test landscape details at the bottom -
all VERY BIG EC2 instances over 10 GB network, so memory, CPU and network do
not appear to be the problem when monitoring.
PROBLEM:
The problem we are running into is that we can't seem to establish even 50K
connections into Tomcat. At some point, we start getting connect failures,
similar to the following:
Couldn't connect java.io.EOFException: null
at
org.apache.tomcat.websocket.WsWebSocketContainer.processResponse(WsWebSocketContainer.java:570)
~[tomcat7-websocket.jar:7.0.48-dev]
at
org.apache.tomcat.websocket.WsWebSocketContainer.connectToServer(WsWebSocketContainer.java:317)
~[tomcat7-websocket.jar:7.0.48-dev]
Wrapped by: javax.websocket.DeploymentException: The HTTP request to initiate
the WebSocket connection failed
at
org.apache.tomcat.websocket.WsWebSocketContainer.connectToServer(WsWebSocketContainer.java:344)
~[tomcat7-websocket.jar:7.0.48-dev]
I'm hoping that someone may be able to advise what changes we might make to the
following Tomcat NIO connector setting that will allow upwards of 100K
websocket connections:
<Connector port="80"
protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
maxConnections="100000"
maxThreads="100000"
redirectPort="8443" />
TEST LANDSCAPE:
The test landscape is all Windows Server 2008 R2 boxes running in EC2 and the
Test Client environment:
Our test client is a multi-threaded java client that makes use of the JSR356
ClientEndpoint functionality. We're creating 40K+ websocket connections from a
single test client machine. The test client is Server 2008 R2 and we have
configured it to allow 50K ephemeral ports, so we should be able to establish
40K+ outbound websocket connections.
Server environment:
* EC2 instance (cc2.8xlarge) (60 GB, 10 GB network, 16 vCPUs)
* Server 2008 R2
* Tomcat 7.0.48 (trunk)
* Java 1.7.0_45
Thanks,
Bob
http://www.thingworx.com<http://www.thingworx.com/>
Skype: bob.deremer.thingworx
O: 610.594.6200 x812
M: 717.881.3986