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.
seige - Siege 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
-
The file also supports UNIX-style commenting:# Comment looks like thishttps://www.joedog.org/https://www.joedog.org/haha/https://www.joedog.org/haha/ POST homer=simpson&marge=doestoo
-
<scheme>://<username>:<password>@<hostname>:<port>/<path> POST <query>
-