Simple Python Frameworks Benchmark

Check out the new site at https://rkblog.dev.

This page contains various test and benchmarks of django, pylons and possibly other frameworks. Those tests shouldn't be trusted in 100%.

Django server httperf test

I've tested how much load the django server can stand without any errors.
Hardware/Software: Arch Linux (i686) on Acer Aspire 5002 WLMi Laptop (AMD Turion 1,6GHz, 512MB DDR RAM) XFS partition. A laptop isn't your Mainframe server ;)
Test conditions: Text mode (no X running, about 16MB of RAM used)
Httperf config:
httperf --server=localhost --port=8080 --uri=/test/ --num-conns=40000 --num-calls=1 --rate=X --timeout=4
where X is numer of connection per second.
Django output: a page which uses a template with 5 variables (one a big string) whole page has 15KB of size. No database is used. Django SVN 0.95 (2006.07.15)

RESULTS

Errors:
- No errors for 100 - 400 connections/s
- 500 conns/s : 24441 errors
- 600: 31758 errors
- 700: 34804 errors

Average connection time (ms):
100: 5
200: 1,8
300: 1,9
400: 1,9
500: 227,3
600: 350,5
700: 513,8

Gentoo AMD 64 system, the same hardware
Errors:
- No errors for 100 - 400 connections/s
- 500 conns/s : 80 errors
- 600: 27069 errors

Average connection time (ms):
200: 7,1
400: 1,9
500: 20,2
600: 482,2

CPU usage by "python" process from "top" (%)
200: 40
400: 75
500: 95
600: goes crazy, 0%
"free -m" returns 30MB of RAM used by the whole system. "top" returns always 3% of RAM used by "python"

The errors

I see:
Traceback (most recent call last):
  File "/home/piotr/nowe/python/django_src/django/core/servers/basehttp.py", line 273, in run
    self.finish_response()
  File "/home/piotr/nowe/python/django_src/django/core/servers/basehttp.py", line 312, in finish_response
    self.write(data)
  File "/home/piotr/nowe/python/django_src/django/core/servers/basehttp.py", line 391, in write
    self.send_headers()
  File "/home/piotr/nowe/python/django_src/django/core/servers/basehttp.py", line 443, in send_headers
    self.send_preamble()
  File "/home/piotr/nowe/python/django_src/django/core/servers/basehttp.py", line 372, in send_preamble
    self._write(
  File "/usr/lib/python2.4/socket.py", line 256, in write
    self.flush()
  File "/usr/lib/python2.4/socket.py", line 243, in flush
    self._sock.sendall(buffer)
error: (32, 'Broken pipe')
When an error ocurs.


Pylons server (paster?) httperf test

The test was the same as for django above, the test page returned a myghty template with 5 variables from the controller (the same values) and so on. I've used SVN pylons and it dependencies (0.9, 2006.07.16) Tested on Archlinux.
development.ini: debug=false
Httperf config:
httperf --server=localhost --port=5000 --uri=/hello/test/ --num-conns=40000 --num-calls=1 --rate=150 --timeout=4

RESULTS

Errors:
- 100: 0
- 200: 30856
- 300: 33902
- 400: 35555
- 500: 35568

Average connection time (ms):
- 100: 3.9
- 200: 822.3
- 300: 804.6
- 400: 1225.4
- 500: 1169.7
"top" says that "paster" uses about 14% of CPU and about 3% of RAM

Turbogears/cherrypy httperf test

I've used a svn version (20.07.2006) of turbogears. I've edited the welcome template and controller so it shows the same data. PS. kid templates with "valid xml" is a big shit... annoying little bastard.

RESULTS

Errors:
- 100: 0
- 200: 37488
- 300: 34381
Average connection time (ms):
- 100: 10.1
- 200: 1948.5 changs
- 300: 3869.5 changs
RkBlog

Web development, 14 July 2008


Check out the new site at https://rkblog.dev.
Comment article
Comment article RkBlog main page Search RSS Contact