Django FCGI Stress Test 01.02.2007
Stress testing the nginx+flup combination seems to have positive results:
# siege -d1 -r10 -c25 nodnod.net
** siege 2.65
** Preparing 25 concurrent users for battle.
250 hits
Availability: 100.00 %
Elapsed time: 10.01 secs
Data transferred: 1.72 MB
Response time: 0.16 secs
Transaction rate: 24.98 trans/sec
Throughput: 0.17 MB/sec
Concurrency: 4.08
Successful transactions: 250
Failed transactions: 0
Longest transaction: 1.96
Shortest transaction: 0.01
Not too bad, I suppose. I would be ecstatic if I could get 25 concurrent users for 10 whole repetitions.
But something a little more challenging reveals:
# 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: 22.06 secs
Data transferred: 4.96 MB
Response time: 1.05 secs
Transaction rate: 45.33 trans/sec
Throughput: 0.22 MB/sec
Concurrency: 47.70
Successful transactions: 713
Failed transactions: 0
Longest transaction: 5.59
Shortest transaction: 0.00
What does this means?
It’s interesting that with 25 users, the concurrency was ~4 — meaning that the server processed requests fast enough so that at any given time, there were at most 4 users connected at the same time.
With 100 users however, server performance decreases drastically, and concurrent users jumped up to a whopping 47.70. That means that at one point, there were 47 users waiting on the server.
To be honest though, I’m not all that worried.
100 users every second for 10 seconds is alot of visitors. Yes, server performance decreased. But on the other hand, there were no failed transactions — everyone would eventually get to the page.
I have a feeling that mod_python would probably perform better than FCGI.
I also have not done any sort of developer dictated caching. Any and all caching done is done automagically by Django.