You are on page 1of 5

Table of Content

Table of Content

1

Apache Benchmark Procedures

2

Webserver Benchmark Examples:

2

 

Static Non-KeepAlive test for Apache web server

2

Static Non-KeepAlive test for lighttpd web server

3

How do I carry out Web server Static KeepAlive test?

4

How do I save result as a Comma separated value?

4

How do I import result into excel or gnuplot programs so that I can create graphs?

4

Sample test.php file

4

Sample psql.php (php+mysql) file

4

 

Important Message from nixCraft:

5

nixCraft: Linux Ti p s , Hacks, Tutorials , And Ideas In Blog Format http://www.cyberciti.biz/

nixCraft: Linux Tips, Hacks, Tutorials, And Ideas In Blog Format http://www.cyberciti.biz/ ~ RSS Feed

Howto: Performance Benchmarks a Webserver

Posted by Vivek Gite <vivek@nixcraft.com> [31 Comments]

You can benchmark Apache, IIS and other web server with apache benchmarking tool called ab. Recently I was asked to performance benchmarks for different web servers.

asked to performance benchmarks for different web servers. [1] It is true that benchmarking a web

[1]

It is true that benchmarking a web server is not an easy task. From how to benchmark a web server [2] :

First, benchmarking a web server is not an easy thing. To benchmark a web server the time it will take to give a page is not important: you don't care if a user can have his page in 0.1 ms or in 0.05 ms as nobody can have such delays on the Internet.

What is important is the average time it will take when you have a maximum number of users on your site simultaneously. Another important thing is how much more time it will take when there are 2 times more users: a server that take 2 times more for 2 times more users is better than another that take 4 times more for the same amount of users."

Here are few tips to carry out procedure along with an example:

Apache Benchmark Procedures

You need to use same hardware configuration and kernel (OS) for all testsprocedure along with an example: Apache Benchmark Procedures You need to use same network configuration. For

You need to use same network configuration. For example, use 100Mbps port for all testssame hardware configuration and kernel (OS) for all tests First record server load using top or

First record server load using top or uptime commandconfiguration. For example, use 100Mbps port for all tests Take at least 3-5 readings and use

Take at least 3-5 readings and use the best resulttests First record server load using top or uptime command After each test reboot the server

After each test reboot the server and carry out test on next configuration (web server)command Take at least 3-5 readings and use the best result Again record server load using

Again record server load using top or uptime commandserver and carry out test on next configuration (web server) Carr y on test usin g

Carry on test usin g static html/ p h p files and d y namic y on test using static html/php files and dynamic pages

Also don't forget to carry out test using fast-cgi and/or perl testsrequests to be se nt over the same TCP connection) features Webserver Benchmark Examples: Let us

Webserver Benchmark Examples:

Let us see how to benchmark a Apache 2.2 [4] and lighttpd [5] 1.4.xx web server.

Static Non-KeepAlive test for Apache web server

i) Note down server load using uptime command

$ uptime

ii) Create a static (small) html page as follows (snkpage.html) (assuming that server IP is 202.54.200.1) in /var/www/html (or use your own webroot):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>Webserver test</title> </head> <body> This is a webserver test page. </body> </html>

Login to Linux/bsd desktop computer and type following command:

$ ab -n 1000 -c 5 http://202.54.200.1/snkpage.html

Where,

-n 1000: ab will send 1000 number of requests to server 202.54.200.1 in order to perform for the benchmarking sessionWhere, -c 5 : 5 is concurrency number i.e. ab will send 5 number of multiple

-c 5 : 5 is concurrency number i.e. ab will send 5 number of multiple requests to perform at a time to server 202.54.200.1in order to perform for the benchmarking session For example if you want to send 10

For example if you want to send 10 request, type following command:

$ ab -n 10 -c 2 http://www.somewhere.com/

Output:

This is ApacheBench, Version 2.0.41-dev <$Revision: 1.141 $> apache-2.0 Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/

Benchmarking www.cyberciti.biz (be patient)

Server Software:

Server Hostname:

Server Port:

80

Document Path:

/

Document Length:

www.somewhere.com

16289 bytes

done

Concurrency Level: 1 Time taken for tests: 16.885975 seconds Complete requests: 10 Failed requests: 0 Write errors: 0 Total transferred: 166570 bytes HTML transferred: 162890 bytes Requests per second: 0.59 [#/sec] (mean) Time per request: 1688.597 [ms] (mean) Time per request: 1688.597 [ms] (mean, across all concurrent requests) Transfer rate: 9.59 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median

Connect: 353 375 16.1 386 391

Processing: 1240 1312 52.1

Waiting: 449 472 16.2 476 499 Total: 1593 1687 67.7 1730 1756

max

1369

1339

Percentage of the requests served within a certain time (ms)

50%

1730

66%

1733

75%

1741

80%

1753

90%

1756

95%

1756

98%

1756

99%

1756

100%

1756 (longest request)

Repeat above command 3-5 times and save the best reading.

Static Non-KeepAlive test for lighttpd web server

First, reboot the server:

# reboot

Stop Apache web server. Now configure lighttpd and copy /var/www/html/snkpage.html to lighttpd webroot and run the command (from other linux/bsd system):

$ ab -n 1000 -c 5 http://202.54.200.1/snkpage.html

c) Plot graph using Spreadsheet or gnuplot.

How do I carry out Web server Static KeepAlive test?

Use -k option that enables the HTTP KeepAlive feature using ab test tool. For example:

$ ab -k -n 1000 -c 5 http://202.54.200.1/snkpage.html

Use the above procedure to create php, fast-cgi and dynmic pages to benchmarking the web server.

Please note that 1000 request is a small number you need to send bigger (i.e. the hits you want to test) requests, for example following command will send 50000 requests :

$ ab -k -n 50000 -c 2 http://202.54.200.1/snkpage.html

How do I save result as a Comma separated value?

Use -e option that allows to write a comma separated value (CSV) file which contains for each percentage (from 1% to 100%) the time (in milliseconds) it took to serve that percentage of the requests:

$ ab -k -n 50000 -c 2 -e apache2r1.cvs http://202.54.200.1/snkpage.html

How do I import result into excel or gnuplot programs so that I can create graphs?

Use above command or -g option as follows:

$ ab -k -n 50000 -c 2 -g apache2r3.txt http://202.54.200.1/snkpage.html

Put following files in your webroot (/var/www/html or /var/www/cgi-bin) directory. Use ab command.

Sample test.php file

#!/usr/bin/perl $command=`perl -v`; $title = "Perl Version";

print [6] "Content-type: text/html\n\n"; print [6] "<html><head><title>$title</title></head>\n<body>\n\n";

print [6] "

<h1>$title</h1>

\n"; print [6] $command;

print [6] "\n\n</body></html>";

Run ab command as follows:

$ ab -n 3000 -c 5 http://202.54.200.1/cgi-bin/test.pl

Sample psql.php (php+mysql) file

<html> <head><title>Php+MySQL</title></head> <body> <?php $link = mysql_connect [7] ("localhost", "USERNAME", "PASSWORD"); mysql_select_db [8] ("DATABASE");

$query = "SELECT * FROM TABLENAME"; $result = mysql_query [9] ($query);

while ($line = mysql_fetch_array [10] ($result))

{

foreach ($line as $value)

{

print [11] "$value\n";

}

}

mysql_close [12] ($link);

?>

</body>

</html>

Run ab command as follows:

$ ab -n 1000 -c 5 http://202.54.200.1/psql.php

Important Message from nixCraft:

4000+ howtos and counting! Want to read more Linux / UNIX howtos, tips and tricks? We request you to sign up for the following to ensure that you make the most from our guides / howtos:

1. RSS feed for nixCraft - Get intimated about our new howtos / faqs as soon as it is released.

2. Daily email newsletter or weekly newsletter - Get intimated about our new howtos / faqs as soon as it is released via email.

We will NEVER rent, sell, or give away your e-mail address to anyone for any reason.

Article printed from nixCraft: http://www.cyberciti.biz/

URL to article: http://www.cyberciti.biz/tips/howto-performance-benchmarks-a-web-server.html

URLs in this post:

[1] Image: http://www.cyberciti.biz/tips/category/apache [2] server: http://www.tldp.org/HOWTO/Caudium-HOWTO/benchmark.html [3] Keep-Alive extension: http://www.cyberciti.biz/tips

http://httpd.apache.org/docs/1.3/mod/core.html#keepalive

[4] Apache 2.2: http://httpd.apache.org/docs/2.2/ [5] lighttpd: http://www.lighttpd.net/ [6] print: http://perldoc.perl.org/functions/print.html [7] mysql_connect: http://www.php.net/mysql_connect [8] mysql_select_db: http://www.php.net/mysql_select_db [9] mysql_query: http://www.php.net/mysql_query [10] mysql_fetch_array: http://www.php.net/mysql_fetch_array [11] print: http://www.php.net/print [12] mysql_close: http://www.php.net/mysql_close

Copyright © 2004-2010 nixCraft. All rights reserved. This print / pdf version is for personal non-commercial use only. More details - http://www.cyberciti.biz/tips/copyright