Django FCGI Stress Test, part 2 01.04.2007

See also: Part 1 of the stress test

Something I didn’t notice when I ran the stress test yesterday was this:

 Transactions:                    1000 hits

And

 Successful transactions:         713

This meant that although no visits timed out, there were a little under 300 requests that got returned either an error, and not a 200 success code.

This was probably because I only had a single FCGI listener.

I’ve since changed it so that I have four FCGI processes running — on unix sockets rather than TCP sockets. I’ve set up nginx to load balance between the four python processes. And then I ran the stress test again.

Results:

 # siege -d1 -r10 -c100 nodnod.net

 ** siege 2.65
 ** Preparing 100 concurrent users for battle.
 The server is now under siege..      done.                                                                                                                                                                       
 Transactions:                    1000 hits
 Availability:                 100.00 %
 Elapsed time:                  32.94 secs
 Data transferred:               9.99 MB
 Response time:                  2.33 secs
 Transaction rate:              30.36 trans/sec
 Throughput:                     0.30 MB/sec
 Concurrency:                   70.68
 Successful transactions:        1000
 Failed transactions:               0
 Longest transaction:            5.14
 Shortest transaction:           0.02

The important part is that there are now 1000 successful transactions out of 1000 attempted transactions.

Interestingly, I also tried proxying django off to an apache instance running only mod_python and nothing else. The results were similar to the above with four FCGI listeners, but at the cost of significantly higher memory.