Web Performance and Load Testing Tools for Linux

Curl - Give detailed response time for loading a page

ab - ApacheBench request generator tool, generate get requests to specified URL

pingdom.com - Full Page load waterfallTest your webpage from remote locations like New York, San Jose.

seigeSiege is an http load testing and benchmarking utility, supports basic authentication, cookies, HTTP, HTTPS

Using CURL to test website response time.

Detailed timing of a website response

The following command returns lookup, connect, pretransfer, starttransfer time in seconds and the total time that the full operation lasted.

$ curl -s -w '\nLookup time:\t%{time_namelookup}\nConnect time:\t%{time_connect}\nPreXfer time:\t%{time_pretransfer}\nStartXfer time:\t%{time_starttransfer}\n\nTotal time:\t%{time_total}\n' -o /dev/null http://www.shellhacks.com

Sample output:

Lookup time:    0,004
Connect time:   0,022
PreXfer time:   0,022
StartXfer time: 0,068

Total time:     0,125

Brief options description:

Option Description
Lookup time (time_namelookup) The time, in seconds, it took from the start until the name resolving was completed
Connect time (time_connect) The time, in seconds, it took from the start until the TCP connect to the remote host was completed
PreXfer time (time_pretransfer) The time, in seconds, it took from the start until the file transfer was just about to begin. This includes all ‘pre-transfer’ commands and negotiations that are specific to the particular protocol(s) involved
StartXfer time (time_starttransfer) The time, in seconds, it took from the start until the first byte was just about to be transferred. This includes ‘time_pretransfer’ and also the time the server needed to calculate the result

More detailed timing of a website response

The following command adds appconnect and redirect time in seconds, to the previous report. These options are available in a latest versions of CURL.

$ curl -s -w '\nLookup time:\t%{time_namelookup}\nConnect time:\t%{time_connect}\nAppCon time:\t%{time_appconnect}\nRedirect time:\t%{time_redirect}\nPreXfer time:\t%{time_pretransfer}\nStartXfer time:\t%{time_starttransfer}\n\nTotal time:\t%{time_total}\n' -o /dev/null http://www.shellhacks.com

Sample output:

Lookup time:    0,003
Connect time:   0,020
AppCon time:    0,000
Redirect time:  0,000
PreXfer time:   0,020
StartXfer time: 0,963

Total time:     1,001

Brief options description:

Option Description
AppCon time (time_appconnect) The time, in seconds, it took from the start until the SSL/SSH/etc connect/handshake to the remote host was completed (Added in 7.19.0)
Redirect time (time_redirect) The time, in seconds, it took for all redirection steps include name lookup, connect, pretransfer and transfer before the final transaction was started. ‘time_redirect’ shows the complete execution time for multiple redirections. (Added in 7.12.3)

Use --version to see if your CURL supports these options.

$ curl --version

ab

ab is installed as part of apache, but you can install it seperate with:

yum install ab

ab -n 100 -c 5 http://localhost/drupal-7.28/

Results of load testing with changes outlined below with Drupal 7

Milestone
Requests per Second
Bare Drupal 7.28 Install 14.04
apc.php 75.50
opcache 95
opcache + page cache -remote host 154
opcache + page cache -localhost 689
Redis  
   

 

siege

Run the benchmark siege test to simulate 50 clients accessing 10 random cached pages.

siege -b -c 50 -r 10 -i -f urls_list.txt

  • -b benchmark mode, no delay between intereation
  • -c <num> concurrent number of concurrent users
  • -r repititions - tells how many times each user should run
  • -i internet mode, read URLs from urls.txt file in random order
  • -d <seconds> delay between page request, can be 0.1
  • -m "<string>" log message to log file for this run
  • -f <file> path to file with URLs one per line unlike command line argument the URLs in the file or not quoted