<About />

My name is Kevin. I am a web professional living in Massachusetts. I build websites mostly using Drupal and jQuery. I use Vim even when I don't need to. When I'm not on the computer, I'm usually hanging with my wife, Melissa.

<Search />

Regression testing Drupal with Siege

So, I was doing some playing with Siege today which can be used to do regression testing and benchmarking on a webserver.

Install on RedHat was easy:

$ yum install siege

Quick test of 100 concurrent users for 10 seconds randomly hitting the urls from url_list.txt (one URL per line):

$ siege -c 100 -t 10s -f url_list.txt

The interesting thing was turning on normal caching in Drupal (no block caching because I'm using the node privacy byrole module). Check out the difference:

Before caching:

** SIEGE 2.66
** Preparing 100 concurrent users for battle.
The server is now under siege...
Lifting the server siege..      done.
Transactions:           27 hits
Availability:       100.00 %
Elapsed time:         9.77 secs
Data transferred:         0.77 MB
Response time:         5.56 secs
Transaction rate:         2.76 trans/sec
Throughput:         0.08 MB/sec
Concurrency:        15.37
Successful transactions:          27
Failed transactions:            0
Longest transaction:         9.26
Shortest transaction:         0.00

After caching:

** SIEGE 2.66
** Preparing 100 concurrent users for battle.
The server is now under siege...
Lifting the server siege..      done.
Transactions:          179 hits
Availability:       100.00 %
Elapsed time:        10.27 secs
Data transferred:         3.45 MB
Response time:         4.67 secs
Transaction rate:        17.43 trans/sec
Throughput:         0.34 MB/sec
Concurrency:        81.40
Successful transactions:         179
Failed transactions:            0
Longest transaction:        10.01
Shortest transaction:         3.65

Third time running after caching:

** SIEGE 2.66
** Preparing 100 concurrent users for battle.
The server is now under siege...
Lifting the server siege..      done.
Transactions:         1353 hits
Availability:       100.00 %
Elapsed time:        10.50 secs
Data transferred:        18.73 MB
Response time:         0.74 secs
Transaction rate:       128.86 trans/sec
Throughput:         1.78 MB/sec
Concurrency:        95.98
Successful transactions:        1353
Failed transactions:            0
Longest transaction:         1.40
Shortest transaction:         0.03

I hit my max_clients limit with plenty of memory to spare the first run, but only had a concurrency of 15. However check out the difference in transactions after turning on caching. 27 before caching and 179 immediately after. Then 563 and 1353 after running a second and third time. Plus, the last run, I hit 95 concurrency!!

Now, Drupal caching isn't going to be as great for authenticated users, but for a site that has mostly anonymous visitors, the caching is pretty impressive. So, moral of the story, turn on normal caching when you install a new Drupal site :)

On a side note, you should also install the devel module and log queries - again quite impressive when you turn on caching.

Are you sure that you want high concurrency?

From the siege docs:
"Concurrency is average number of simultaneous connections, a number which rises as server performance decreases. "

So, higher is not better.

But response time dropped from over 5 to under 1 second, which is good. Why it was so high to begin with is a good question, though.

Post new comment

  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <span> <a>
  • Lines and paragraphs break automatically.
  • You may post code using <code>...</code> (generic) or <?php ... ?> (highlighted PHP) tags.

More information about formatting options

Mollom CAPTCHA (play audio CAPTCHA)
Type the characters you see in the picture above; if you can't read them, submit the form and a new image will be generated.