如何:Web 服务器性能基准测试
您可以使用 Apache 基准测试工具 ab 对 Apache、IIS 和其他 Web 服务器进行基准测试。最近有人要求我为不同的 Web 服务器进行性能基准测试。
确实,对 Web 服务器进行基准测试并非易事。从如何对 Web服务器进行基准测试开始:
首先,对 Web 服务器进行基准测试并非易事。对 Web 服务器进行基准测试时,显示页面所需的时间并不重要:您不必关心用户是否能在 0.1 毫秒或 0.05 毫秒内看到页面,因为互联网上没有人能承受这样的延迟。
重要的是,当您的网站同时有最大数量的用户时,平均需要多长时间。另一个重要的事情是,当用户数量增加 2 倍时,需要花费多少时间:为 2 倍用户花费 2 倍时间的服务器比为相同数量的用户花费 4 倍时间的服务器更好。”
以下是执行该过程的一些提示以及示例:
Apache 基准测试程序
- 您需要对所有测试使用相同的硬件配置和内核(操作系统)
- 您需要使用相同的网络配置。例如,所有测试均使用 100Mbps 端口
- 首先使用top或者uptime命令记录服务器负载
- 至少进行 3-5 次读数并使用最佳结果
- 每次测试后重新启动服务器并对下一个配置(Web 服务器)进行测试
- 再次使用 top 或 uptime 命令记录服务器负载
- 使用静态 html/php 文件和动态页面进行测试
- 使用 Non-KeepAlive 和 KeepAlive( Keep-Alive 扩展提供长寿命 HTTP 会话,允许通过同一个 TCP 连接发送多个请求)功能进行测试也很重要
- 另外不要忘记使用 fast-cgi 和/或 perl 测试进行测试
Web 服务器基准测试示例:
让我们看看如何对Apache 2.2和lighttpd 1.4.xx Web 服务器进行基准测试。
Apache Web 服务器的静态非 KeepAlive 测试
i)使用 uptime 命令记录服务器负载
$ uptime
ii) 在 /var/www/html 中创建一个静态(小型)html 页面,如下所示(snkpage.html)(假设服务器 IP 为 202.54.200.1)(或使用您自己的 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>
登录到 Linux/bsd 台式计算机并输入以下命令:
$ ab -n 1000 -c 5 http://202.54.200.1/snkpage.html
其中,
- -n 1000:ab 将向服务器 202.54.200.1 发送 1000 个请求,以执行基准测试会话
- -c 5 :5 是并发数,即 ab 将一次向服务器 202.54.200.1 发送 5 个要执行的多个请求
例如如果您想发送 10 个请求,请输入以下命令:
$ ab -n 10 -c 2 http://www.somewhere.com/
输出:
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.example.com (be patient).....done Server Software: Server Hostname: www.somewhere.com Server Port: 80 Document Path: / Document Length: 16289 bytes 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 max Connect: 353 375 16.1 386 391 Processing: 1240 1312 52.1 1339 1369 Waiting: 449 472 16.2 476 499 Total: 1593 1687 67.7 1730 1756 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)
重复上述命令 3-5 次并保存最佳读数。
lighttpd 网络服务器的静态非 KeepAlive 测试
首先,重启服务器:
# reboot
停止 Apache Web 服务器。现在配置 lighttpd 并将 /var/www/html/snkpage.html 复制到 lighttpd webroot 并运行命令(从其他 linux/bsd 系统):
$ ab -n 1000 -c 5 http://202.54.200.1/snkpage.html
c) 使用电子表格或 gnuplot 绘制图形。
如何进行 Web 服务器静态 KeepAlive 测试?
使用 -k 选项通过 ab 测试工具启用 HTTP KeepAlive 功能。例如:
$ ab -k -n 1000 -c 5 http://202.54.200.1/snkpage.html
使用上述过程创建 php、fast-cgi 和动态页面来对 Web 服务器进行基准测试。
请注意,1000 个请求是一个较小的数字,您需要发送更大的请求(即您想要测试的命中次数),例如以下命令将发送 50000 个请求:
$ ab -k -n 50000 -c 2 http://202.54.200.1/snkpage.html
如何将结果保存为逗号分隔的值?
使用 -e 选项可以写入一个逗号分隔值(CSV)文件,其中包含每个百分比(从 1% 到 100%)处理该百分比请求所花费的时间(以毫秒为单位):
$ ab -k -n 50000 -c 2 -e apache2r1.cvs http://202.54.200.1/snkpage.html
如何将结果导入 Excel 或 Gnuplot 程序以便创建图表?
使用上述命令或 -g 选项如下:
$ ab -k -n 50000 -c 2 -g apache2r3.txt http://202.54.200.1/snkpage.html
将以下文件放入您的 webroot(/var/www/html 或 /var/www/cgi-bin)目录中。使用 ab 命令。
示例 test.php 文件
Php test with phpinfo()