<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body><div>I don't usually do performance tests on mono as such. <br></div>
<div>I'm not terribly interested in how good or bad a particular component/routine performs.<br></div>
<div>Usually it's fast enough for my purposes.<br></div>
<div> </div>
<div>I just perform load tests, mainly to see if the system is stable and fast enough, especially under multiple concurrent users.  <br></div>
<div>I've always found that particularly interesting and useful, as it quickly uncovers the most severe multi-threading or performance related bugs in any code. <br></div>
<div>And in the end, stability under higher load than 1 concurrent users is what really matters most, and is what's tested least.<br></div>
<div> </div>
I had benchmarked xsp-2.10.2 from the stable sources several times, it never survived the attempt without crashing ;)<br><div> </div>
<div>I just benchmarked it now, at 6:40 in the morning, no crash, doesn't look bad ;)<br></div>
<div>Oh, and haha, as a side-remark, LoadImpact doesn't seem to be verifying if you're the test-target server owner - ouch, ouch ouch, grossly negligent.<br></div>
<div>Benchmark results are here:<br></div>
<div><a href="https://loadimpact.com/load-test/www.daniel-steiger.ch-b67fbd0a9e513bdb6d1cfda8f044e082">https://loadimpact.com/load-test/www.daniel-steiger.ch-b67fbd0a9e513bdb6d1cfda8f044e082</a> <br></div>
<div>That basically is a benchmark of /Home/Index.<br></div>
<div> </div>
<div>If you want to know how that compares to a plain and simple webserver, I ran a benchmark on<br></div>
<div><a href="http://88.84.21.77/">http://88.84.21.77/</a><br></div>
<div>that's plain and simple nginx (nginx version: nginx/1.4.1) there on the same server.<br></div>
<div>And those are the results: </div>
<div><a href="http://loadimpact.com/load-test/88.84.21.77-a7f4b192a3435b38405e2751299f8d05">http://loadimpact.com/load-test/88.84.21.77-a7f4b192a3435b38405e2751299f8d05</a><br></div>
<div> </div>
<div> </div>
<div> </div>
<div>FYI, the version of mono on the server is:<br></div>
<div>3.2.7 (master/45d5758 Tue Dec  3 11:57:34 CET 2013)<br></div>
<div>ASP.NET Version: 4.0.30319.17020<br></div>
<div> </div>
<div>xsp (and therefore fastcgi-server) <br></div>
<div>Tue Feb 4, 21:36 CET 2014 <br></div>
<div> </div>
<div> </div>
<div> </div>
<div>Opps, looks like that happiness was premature. <br></div>
<div>I thought that /Gallery/Index would probably make for a more interesting benchmark, since all /Home/Index does is add a few strings to a list, and a little razor syntax generation. <br></div>
<div>Now I get a HTTP 502 bad gateway . <br></div>
<div>Here the test results, showing the problem/crash between 06:59 and 07:00 o'clock<br></div>
<div><a href="http://loadimpact.com/load-test/daniel-steiger.ch-39452482e4a26c612d067e1582addb99">http://loadimpact.com/load-test/daniel-steiger.ch-39452482e4a26c612d067e1582addb99</a><br></div>
<div> </div>
<div><span style="line-height: 1.25;">Looks like the fastcgi-mono-server4 process is gone. </span><br></div>
<div> </div>
<div><span style="line-height: 1.25;">/etc/init.d/monoserve.sh stop</span><br></div>
<div>yields: mono server is not running<br></div>
<div> </div>
<div>Restarted it. <br></div>
<div>On the upside, that's a really entertaining graph - server crash as graph ;)<br></div>
<div>Looks like something isn't as thread-safe as it should be, <br></div>
<div>My guess is that this is probably related to image re-sizing, but might as well by my own code's fault. <br></div>
<div> </div>
<div> </div>
<div> </div>
<div>landscape-sysinfo<br></div>
<div>  System load:  0.03                         Processes:             126<br></div>
<div>  Usage of /:   11.2% of 105.74GB    Users logged in:       1<br></div>
<div>  Memory usage: 5%                        IP address for p32p1:  192.168.1.2<br></div>
<div>  Swap usage:   4%                          IP address for virbr0: 192.168.122.1<br></div>
<div> </div>
<div> </div>
<div> </div>
<div>Server details (since uplink speed, RAM and CPU are relevant):<br></div>
<div> </div>
<div>Measured Uplink speed is 2.03 Mbps (259 kb/s)<br></div>
<div>Measured Downlink speed is 19.41 Mbps (2'484 kb/s = 2.42 MB/s)<br></div>
<div>Server: Zotac Zbox, model forgotten ;)<br></div>
<div>RAM: 4GB<br></div>
<div>Processor: Intel(R) Atom(TM) CPU D510 (64 bit), dual core, 512 kb cache <br></div>
<div> </div>
<div>grep MemTotal /proc/meminfo<br></div>
<div>MemTotal:        4038512 kB<br></div>
<div> </div>
<div> </div>
<div>free -m<br></div>
<div>                    total       used       free     shared    buffers     cached<br></div>
<div>Mem:          3943        469       3474          0         19        237<br></div>
<div>-/+ buffers/cache:        212       3731<br></div>
<div>Swap:         4087        179       3908<br></div>
<div> </div>
<div> </div>
<div> </div>
<div>On Tue, Feb 18, 2014, at 06:49 AM, Greg Young wrote:<br></div>
<blockquote type="cite"><div>
Did you by chance benchmark the fast cgi server for basic performance numbers? Just curious how it sits compared to http listener.<br></div>
<div> </div>
<div>Cheers,<br></div>
<div> </div>
<div><div>Greg<br></div>
<div> </div>
<div>On Tuesday, 18 February 2014, SirNoSkill <<a href="mailto:quandary82@hailmail.net">quandary82@hailmail.net</a>> wrote:<br></div>
<div> </div>
<blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>Hi,<br></div>
<div> </div>
<div>
I downloaded the sources for XSP from git.<br></div>
<div>
And it seems Mono.WebServer.FastCgi has been under quite a bit of<br></div>
<div>
change.<br></div>
<div>
First I wanted to thank the person(s) responsible for it, seems like the<br></div>
<div>
fastcgi server is finally stable, or at least stable enough that it<br></div>
<div>
hasn't crashed once in the last 2 weeks, including a performance load<br></div>
<div>
test.<br></div>
<div>
Keep up the good work.<br></div>
<div> </div>
<div>
One thing though:<br></div>
<div>
It worked fine with TCP, but when I tried with unix sockets, I got this<br></div>
<div>
error:<br></div>
<div>
Error parsing permissions "". Use octal."<br></div>
<div> </div>
<div>
In file<br></div>
<div>
/xsp/src/Mono.WebServer.FastCgi/main.cs<br></div>
<div>
in function public static bool TryCreateUnixSocket (string path, out<br></div>
<div>
Socket socket, string perm = null)<br></div>
<div> </div>
<div>
there is this code:<br></div>
<div>
if (perm == null) {<br></div>
<div>
    socket = new UnixSocket (realPath);<br></div>
<div>
    Logger.Write (LogLevel.Debug, "Listening on file {0} with default<br></div>
<div>
    permissions", realPath);<br></div>
<div>
} else {<br></div>
<div>
    ushort uperm;<br></div>
<div>
    if (!UInt16.TryParse (perm, out uperm)) {<br></div>
<div>
        Logger.Write (LogLevel.Error, "Error parsing permissions<br></div>
<div>
        \"{0}\". Use octal.", perm);<br></div>
<div>
        return false;<br></div>
<div>
    }<br></div>
<div> </div>
<div> </div>
<div>
that should probably be<br></div>
<div>
if(string.IsNullOrEmpty(perm)){<br></div>
<div>
because UInt16.TryParse will fail if perm is string.Empty.<br></div>
<div> </div>
<div>
If I fix this, fastcgi-server starts, but I get a HTTP 502.<br></div>
<div>
Since the config works fine if I use TCP, I guess this is a<br></div>
<div>
fastcgi-server bug.<br></div>
<div>
Just thought I let you know.<br></div>
<div> </div>
<div>
It's unlikely it's a permission bug, since I let fastcgi-mono-server4<br></div>
<div>
run as root.<br></div>
<div>
Just in case, here my configuration settings:<br></div>
<div> </div>
<div>
This is my fastcgi-start script<br></div>
<div> </div>
<div>
#!/bin/sh<br></div>
<div> </div>
<div>
### BEGIN INIT INFO<br></div>
<div>
# Provides:          monoserve.sh<br></div>
<div>
# Required-Start:    $local_fs $syslog $remote_fs<br></div>
<div>
# Required-Stop:     $local_fs $syslog $remote_fs<br></div>
<div>
# Default-Start:     2 3 4 5<br></div>
<div>
# Default-Stop:      0 1 6<br></div>
<div>
# Short-Description: Start fastcgi mono server with hosts<br></div>
<div>
### END INIT INFO<br></div>
<div> </div>
<div>
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin<br></div>
<div>
DAEMON=/usr/bin/mono<br></div>
<div>
NAME=monoserver<br></div>
<div>
DESC=monoserver<br></div>
<div> </div>
<div>
MONOSERVER=$(which fastcgi-mono-server4)<br></div>
<div>
MONOSERVER_PID=$(ps auxf | grep fastcgi-mono-server4.exe | grep -v grep<br></div>
<div>
| awk '{print $2}')<br></div>
<div> </div>
<div>
WEBAPPS="<a href="http://www.example.com:/:/root/VS2010/SqlWebAdmin/SqlWebAdmin/,example.com:/:/root/VS2010/SqlWebAdmin/SqlWebAdmin/">www.example.com:/:/root/VS2010/SqlWebAdmin/SqlWebAdmin/,example.com:/:/root/VS2010/SqlWebAdmin/SqlWebAdmin/</a>"<br></div>
<div>
#WEBAPPS="<a href="http://www.domain1.xyz:/:/var/www/domain1.xyz/,www.domain2.xyz:/:/var/www/domain2.xyz/">www.domain1.xyz:/:/var/www/domain1.xyz/,www.domain2.xyz:/:/var/www/domain2.xyz/</a>"<br></div>
<div> </div>
<div>
case "$1" in<br></div>
<div>
        start)<br></div>
<div>
                if [ -z "${MONOSERVER_PID}" ]; then<br></div>
<div>
                        echo "starting mono server"<br></div>
<div> </div>
<div> </div>
<div>
                        # ${MONOSERVER} /applications=${WEBAPPS}<br></div>
<div>
                        /socket=unix:/tmp/fastcgi.socket &<br></div>
<div>
                        # ${MONOSERVER} /applications=${WEBAPPS}<br></div>
<div>
                        /socket=tcp:<a href="http://127.0.0.1:9000" target="_blank">127.0.0.1:9000</a> &<br></div>
<div>
                        ${MONOSERVER} /applications=${WEBAPPS}<br></div>
<div>
                        /socket=unix:/var/run/mono3-fcgi.sock &<br></div>
<div>
                        echo "mono server started"<br></div>
<div>
                else<br></div>
<div>
                        echo ${WEBAPPS}<br></div>
<div>
                        echo "mono server is running"<br></div>
<div>
                fi<br></div>
<div>
        ;;<br></div>
<div>
        stop)<br></div>
<div>
                if [ -n "${MONOSERVER_PID}" ]; then<br></div>
<div>
                        kill ${MONOSERVER_PID}<br></div>
<div>
                        echo "mono server stopped"<br></div>
<div>
                else<br></div>
<div>
                        echo "mono server is not running"<br></div>
<div>
                fi<br></div>
<div>
        ;;<br></div>
<div>
        *) echo "You have provided no or an invalid command line<br></div>
<div>
        argument."<br></div>
<div>
        ;;<br></div>
<div>
esac<br></div>
<div> </div>
<div>
exit 0<br></div>
<div> </div>
<div> </div>
<div> </div>
<div>
and this the nginx configuration<br></div>
<div> </div>
<div> </div>
<div>
##<br></div>
<div>
# You should look at the following URL's in order to grasp a solid<br></div>
<div>
understanding<br></div>
<div>
# of Nginx configuration files in order to fully unleash the power of<br></div>
<div>
Nginx.<br></div>
<div>
# <a href="http://wiki.nginx.org/Pitfalls" target="_blank">http://wiki.nginx.org/Pitfalls</a><br></div>
<div>
# <a href="http://wiki.nginx.org/QuickStart" target="_blank">http://wiki.nginx.org/QuickStart</a><br></div>
<div>
# <a href="http://wiki.nginx.org/Configuration" target="_blank">http://wiki.nginx.org/Configuration</a><br></div>
<div>
#<br></div>
<div>
# Generally, you will want to move this file somewhere, and start with a<br></div>
<div>
clean<br></div>
<div>
# file but keep this around for reference. Or just disable in<br></div>
<div>
sites-enabled.<br></div>
<div>
#<br></div>
<div>
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed<br></div>
<div>
examples.<br></div>
<div>
##<br></div>
<div> </div>
<div> </div>
<div>
 server {<br></div>
<div>
         listen   80;<br></div>
<div>
         server_name <a href="http://www.example.com" target="_blank">www.example.com</a> <a href="http://example.com" target="_blank">example.com</a>;<br></div>
<div>
         access_log   /var/log/nginx/your.domain1.xyz.access.log;<br></div>
<div> </div>
<div>
         location / {<br></div>
<div>
                 root /root/VS2010/SqlWebAdmin/SqlWebAdmin;<br></div>
<div>
                 #index index.html index.htm default.aspx Default.aspx;<br></div>
<div>
                 #fastcgi_index Default.aspx;<br></div>
<div>
                 #fastcgi_pass <a href="http://127.0.0.1:9000" target="_blank">127.0.0.1:9000</a>;<br></div>
<div>
                 fastcgi_pass unix:/var/run/mono3-fcgi.sock;<br></div>
<div>
                 include /etc/nginx/fastcgi_params;<br></div>
<div>
         }<br></div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div>
        location /doc {<br></div>
<div>
                root /usr/share;<br></div>
<div>
                autoindex on;<br></div>
<div>
                allow 127.0.0.1;<br></div>
<div>
                deny all;<br></div>
<div>
        }<br></div>
<div> </div>
<div>
        location /shared_images {<br></div>
<div>
                root /usr/share;<br></div>
<div>
                autoindex off;<br></div>
<div>
        }<br></div>
<div> </div>
<div>
        error_page 404 /CustomErrors/404.htm;<br></div>
<div> </div>
<div>
        # redirect server error pages to the static page /50x.html<br></div>
<div>
        #<br></div>
<div>
        #error_page 500 502 503 504 /50x.html;<br></div>
<div>
        #location = /50x.html {<br></div>
<div>
        #       root /usr/share/nginx/www;<br></div>
<div>
        #}<br></div>
<div> </div>
<div>
}<br></div>
<div> </div>
<div> </div>
<div>
/etc/hosts entries:<br></div>
<div>
127.0.0.1       <a href="http://example.com" target="_blank">example.com</a><br></div>
<div>
127.0.0.1 <a href="http://www.example.com" target="_blank">www.example.com</a><br></div>
<div> </div>
<div> </div>
<div>
Kind regards<br></div>
<div> </div>
<div>
NoSkillz<br></div>
<div> </div>
<div>
--<br></div>
<div>
<a href="http://www.fastmail.fm" target="_blank">http://www.fastmail.fm</a> - IMAP accessible web-mail<br></div>
<div> </div>
<div>
_______________________________________________<br></div>
<div>
Mono-devel-list mailing list<br></div>
<div>
<a>Mono-devel-list@lists.ximian.com</a><br></div>
<div>
<a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br></div>
<div> </div>
</blockquote></div>
<div> </div>
<div> </div>
<div>-- <br></div>
<div>Le doute n'est pas une condition agréable, mais la certitude est absurde.<br></div>
<div> </div>
</blockquote><div> </div>
<div id="sig3972393"><div class="signature">-- <br></div>
<div class="signature">  SirNoSkill<br></div>
<div class="signature">  <a href="mailto:quandary82@hailmail.net">quandary82@hailmail.net</a><br></div>
<div class="signature"> </div>
</div>
<pre>
-- 
http://www.fastmail.fm - A fast, anti-spam email service.
</pre>
</body>
</html>