问题描述
|
我就是从今天开始使用AB。阅读几本关于AB的新教程,并考虑尝试对其网站进行负载测试。
使用几次后,我收到了大量失败的请求。您能否解释失败请求的含义?如何对此问题进行更多调查?
样本AB结果:
-jailshell-3.2$ ab -n500 -c10 http://www.tweeting.tv/index.PHP
This is ApacheBench,Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
copyright 1996 Adam Twiss,Zeus Technology Ltd,http://www.zeustech.net/
copyright 2006 The Apache Software Foundation,http://www.apache.org/
Benchmarking www.tweeting.tv (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Finished 500 requests
Server Software: Apache
Server Hostname: www.tweeting.tv
Server Port: 80
Document Path: /index.PHP
Document Length: 242861 bytes
Concurrency Level: 10
Time taken for tests: 97.846330 seconds
Complete requests: 500
Failed requests: 481
(Connect: 0,Length: 481,Exceptions: 0)
Write errors: 0
Non-2xx responses: 2
Total transferred: 121214449 bytes
HTML transferred: 121003283 bytes
Requests per second: 5.11 [#/sec] (mean)
Time per request: 1956.927 [ms] (mean)
Time per request: 195.693 [ms] (mean,across all concurrent requests)
Transfer rate: 1209.78 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1503 1675.5 1 9036
Processing: 130 393 285.1 319 2382
Waiting: 92 244 226.3 192 2180
Total: 153 1896 1726.2 1121 10374
Percentage of the requests served within a certain time (ms)
50% 1121
66% 3308
75% 3355
80% 3375
90% 3451
95% 3603
98% 4163
99% 9315
100% 10374 (longest request)
N.B.我正在使用Hostgator Linux共享服务器。
解决方法
这是动态页面的问题,它的发生是因为在请求之间内容长度可能有所不同。在此类页面上使用ab时,您需要使用
-l
选项。
-l Accept variable document length (use this for dynamic pages)
, 失败的请求全部基于长度-即与指定的字节数不完全匹配的响应数。这将归因于动态内容(例如广告等)的每次投放都不同,因此无需担心。
, 马丁是正确的。更有用的是,我快速浏览了我们的生产服务器:
{user@staging:~}$ for i in `seq 1 10`; do curl -sk https://app.copperegg.com/login > /tmp/lb$i.txt ; done
{user@staging:~}$ wc /tmp/lb*
74 239 3316 /tmp/lb1.txt
74 239 3324 /tmp/lb10.txt
74 239 3320 /tmp/lb2.txt
74 239 3316 /tmp/lb3.txt
74 239 3316 /tmp/lb4.txt
74 239 3316 /tmp/lb5.txt
74 239 3320 /tmp/lb6.txt
74 239 3316 /tmp/lb7.txt
74 239 3316 /tmp/lb8.txt
74 239 3316 /tmp/lb9.txt
740 2390 33176 total
{user@staging:~}$ diff /tmp/lb1.txt /tmp/lb10.txt
7c7
< var g_time_offset = new Date().getTime() - 1318965621000;
---
> var g_time_offset = new Date().getTime() - 1318965622000;
15c15
< <meta name=\"csrf-token\" content=\"bi9pgbUoUQLOwB3V8fT1E40sV06x4914ybLSvnfEeeg=\"/>
---
> <meta name=\"csrf-token\" content=\"GL/RRZCf2Zk/AQzRgEW2U4Iv3htD1hodt2qfp4jwIxQ=\"/>
23c23
< <form accept-charset=\"UTF-8\" action=\"/authenticate\" id=\"loginForm\" method=\"post\"><div style=\"margin:0;padding:0;display:inline\"><input name=\"utf8\" type=\"hidden\" value=\"✓\" /><input name=\"authenticity_token\" type=\"hidden\" value=\"bi9pgbUoUQLOwB3V8fT1E40sV06x4914ybLSvnfEeeg=\" /></div>
---
> <form accept-charset=\"UTF-8\" action=\"/authenticate\" id=\"loginForm\" method=\"post\"><div style=\"margin:0;padding:0;display:inline\"><input name=\"utf8\" type=\"hidden\" value=\"✓\" /><input name=\"authenticity_token\" type=\"hidden\" value=\"GL/RRZCf2Zk/AQzRgEW2U4Iv3htD1hodt2qfp4jwIxQ=\" /></div>
{user@staging:~}$ diff /tmp/lb1.txt /tmp/lb2.txt
7c7
< var g_time_offset = new Date().getTime() - 1318965621000;
---
> var g_time_offset = new Date().getTime() - 1318965622000;
9,10c9,10
< <link href=\"/stylesheets/application.css?1318747862\" media=\"screen\" rel=\"stylesheet\" type=\"text/css\" />
< <script src=\"/javascripts/cache/application.js?1318747811\" type=\"text/javascript\"></script>
---
> <link href=\"/stylesheets/application.css?1318747582\" media=\"screen\" rel=\"stylesheet\" type=\"text/css\" />
> <script src=\"/javascripts/cache/application.js?1318747448\" type=\"text/javascript\"></script>
15c15
< <meta name=\"csrf-token\" content=\"bi9pgbUoUQLOwB3V8fT1E40sV06x4914ybLSvnfEeeg=\"/>
---
> <meta name=\"csrf-token\" content=\"BMZKKUZ3WFhQrCIewQ81VuArEtUp8gc6ccr0Wi3/sqE=\"/>
23c23
< <form accept-charset=\"UTF-8\" action=\"/authenticate\" id=\"loginForm\" method=\"post\"><div style=\"margin:0;padding:0;display:inline\"><input name=\"utf8\" type=\"hidden\" value=\"✓\" /><input name=\"authenticity_token\" type=\"hidden\" value=\"bi9pgbUoUQLOwB3V8fT1E40sV06x4914ybLSvnfEeeg=\" /></div>
---
> <form accept-charset=\"UTF-8\" action=\"/authenticate\" id=\"loginForm\" method=\"post\"><div style=\"margin:0;padding:0;display:inline\"><input name=\"utf8\" type=\"hidden\" value=\"✓\" /><input name=\"authenticity_token\" type=\"hidden\" value=\"BMZKKUZ3WFhQrCIewQ81VuArEtUp8gc6ccr0Wi3/sqE=\" /></div>
{user@staging:~}$
注意,我们正在看到一个\“ content \”字符串,其中包含一个丑陋的字符串。注意,\'/ \'字符在\“ form \”行中,但是在\“ meta \”行中,它用\“ / \”代替。这说明了我的请求长度之间有4个或8个字符的差异。
令人讨厌的是apachebench无法聪明地解决这个问题,但是至少我们可以找到原因。