blob: da26eac31860643e775dc601929934a8918065f4 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
|
<tt>
<div dir="ltr">Hi,<div><br></div><div>I've started work on a project using Clojure, but I was wondering whether (and secretly hoping that) Erlang would be a better fit, so I've been load testing a few web server frameworks. I'm particularly interested in how the server can handle a large number of concurrent WebSocket connections, and the test I've been running is similar to Eric Moritz's [1].</div><br>
<div><br></div><div>I've setup a simple Cowboy 'echo' server running on an EC2 instance (m1.medium, as in Eric's test) which could comfortably handle 10k concurrent WebSocket requests (as in Eric's results), while echoing about 200 messages/second. The CPU usage of the VM at this point is about 99%, but the server continues to handle up to 40k concurrent connections with a consistent average response time (<30ms). Pushing the test beyond this number results in a spike in response times and lots of connection timeouts.</div><br>
<div><br></div><div>40k connections seems pretty good, but when comparing this to the same test against a couple of Clojure/JVM-based frameworks (specifically Aleph/Netty and http-kit) I find I can get higher numbers of concurrent connections with slightly better average response times (100k connections, <10ms response time) using much less CPU (~20%). In fact, memory seems to be the limiting factor.</div><br>
<div><br></div><div>So I have two questions:</div><div><br></div><div>1) Should I be concerned about the CPU usage in the Erlang/Cowboy test? I have limited experience with Erlang so far, but 100% CPU feels like a bad thing.</div><br>
<div><br></div><div>2) Is there any way to increase the performance of the cowboy server? Are there any Erlang VM parameters I can change? The fact that the Clojure/JVM tests (on the same machine) have managed to get to 100k connections suggests that the limitation isn't being imposed by the operating system (I've applied changes various changes to sysctl and ulimit).</div><br>
<div><br></div><div>(Perhaps an echo server isn't the best way to compare HTTP servers, but it feels like a good starting point.)</div><div><br></div><div>Thanks for any help.</div><div><br></div><div>[1]�<a href="https://github.com/ericmoritz/wsdemo/blob/results-v1/results.md">https://github.com/ericmoritz/wsdemo/blob/results-v1/results.md</a> - the GitHub repo actually contains code for an Aleph server, but results from this aren't included in the summary here.<br clear="all"><br>
<div><br></div></div></div><br>
</tt>
|