/PerfTestWebSockets

TLDR; Do not host WebSockets in OWIN/IIS

Primary LanguageC#

PerfTestWebSockets

Testing difference in performance when hosting XSockets stand-alone vs hosting in Owin/IIS

You need artillery.io installed to run the tests.

  • Start the project to test in release mode (no debugging)
  • Navigate to the projects Artillery folder and run artillery run WebSocketsTest.yml

Results on my machine Win10 Intel Core I7 16 GB RAM

SelfHosted

When running SelfHosted I get around 50% CPU on XSockets and ~200MB RAM After the test the process goes down to 0% CPU and memory is collected and stays at ~25MB

OwinHosted 1

When running OwinHosted I get 100 % CPU on the machine and IIS takes all it can, around 90% and memory grows to ~400+ MB RAM After killing the test the process still hangs on max CPU load and have to be killed.

OwinHosted 2

In the Startup when hosting in Owin you can choose to use XSockets (done in OwinHosted 1), but to make sure that the XSockets Owin extension is not the cause I created a simple CustomWebSocket class to handle incoming connections

So open the OwinHosted Startup file and change

app.UseXSockets(true);
// app.Use<CustomWebSocket>();

to

//app.UseXSockets(true);
app.Use<CustomWebSocket>();

Unfortunately this does not change anything, IIS takes 100% CPU and hangs until killed