Here is the notes I took notes from topfunky's httperf screencast.
Production Log Analyzer is a gem that lets you find out which pages on
your site are dragging you down.
Change one thing at a time and benchmark. Take actual data from
production db, export it and use it for benchmarking. Create a
separate environment for benchmarking.
Install httperf. Need 2 machines one for running httperf client and
the other for running Rails app.
Shut down all unnecessary programs on both machines to reduce CPU
usage. This reduces unpredictable results.
Process for Benchmarking Webapplication using Httperf
1) rake sweep_cache
2) mongrel_rails start -e production (no logging)
3) Hit a particular page once
4) run httperf (with consistent args)
Step 1 and 2 is run on Rails app machine. Go to browser on the client
machine load the page and run:
httperf --server machine_name --port 3000 --ur /page_name --num-conns 1000
The number of connections parameter can be changed. In the output of
the httperf make sure that you get number of replies is same as total
connections. Reply status should not have any errors. If there are any
httperf errors the results must be tossed out.
Copy the "Reply rate" line of the httperf output for different number
of connections and use topfunky's script to generate graphs.
Tuning Mongrel for Performance
Here are the steps for finding how many requests per second a single
Mongrel process can handle.
httperf --server machine_name --uri /page_name --port 3000 --num-conns
7000 --rate 650 --hog
650 is the requests/sec
If this process hangs for more than 20 secs then we have overloaded
Mongrel. Httperf should have no errors (because it means httperf was
overloaded, in that case data must be tossed out).
Try different values for number of connections and rate, such as 6600,
660, 6700, 670 etc. Till the reply rate reaches a maxium and begins to