最近在做系统的压力测试,使用webbench和ab两个工具,系统由3个tomcat在同一服务器上mod_jk作负载均衡,JVM最大内存分配2G,最小1G。这个测试是对一个比较复杂的Servlet进行请求,servlet大概会JOIN 7个表格,并返回2K左右的结果,没有session。测试结果如下:
webbench -c 1000 -t 60 http://doman.com/MyServlet?param=12345
Webbench - Simple Web Bench 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.Benching: GET http://doman.com/MyServlet?param=12345
1000 clients, running 60 sec.Speed=6426 pages/min, 1499541 bytes/sec.
Requests: 5207 susceed, 1219 failed.
webbench的测试结果,里面有1219挂掉的,ab的测试,1000次1000并发测试(ab -n 1000 -c 1000)时基本完成不了,800并发有时候能完成,500并发基本没问题。但ab的结果不稳定,比如1000并发时,有时候能完成800次请求,有时能完成500次,有时候甚至100个都完成不了。调整并发数量到500时也会出现这样的问题。无法完成时报错信息是apr_socket_recv: Connection reset by peer (104)下面是用ab测试,200并发1000次执行的结果。也有11个失败的Server Software: Apache/2.2.14
Server Hostname: domain.com
Server Port: 80Document Path: MyServlet?param=12345
Document Length: 17042 bytesConcurrency Level: 200
Time taken for tests: 11.480 seconds
Complete requests: 1000
Failed requests: 11
(Connect: 0, Receive: 0, Length: 11, Exceptions: 0)
Write errors: 0
Total transferred: 17280292 bytes
HTML transferred: 17044292 bytes
Requests per second: 87.11 [#/sec] (mean)
Time per request: 2296.027 [ms] (mean)
Time per request: 11.480 [ms] (mean, across all concurrent requests)
Transfer rate: 1469.96 [Kbytes/sec] receivedConnection Times (ms)
min mean[+/-sd] median max
Connect: 0 43 351.9 0 2999
Processing: 420 2141 619.7 2139 5440
Waiting: 371 2138 619.6 2135 5438
Total: 426 2184 743.2 2141 7162Percentage of the requests served within a certain time (ms)
50% 2141
66% 2313
75% 2441
80% 2506
90% 2804
95% 3341
98% 4373
99% 5362
100% 7162 (longest request)
麻烦大家帮我看看测试结果是什么意思。我有几个问题:
1. webbench里出现failure是什么意思,是否意味着高并发时有的访问会失败?如果访问失败,那用户是得到500或404报错信息,还是速度变慢?
2. ab测试无法通过是什么原因?
3. 1000并发数大概是多少平均每分钟访问量达到的?在webben参数里,1000并发运行60秒,这个测试数据合理吗?
4. 一个繁忙的网站,如果日访问量超过千万,并发的峰值能达到多少?
5. 还有什么方法可以解决高并发可能产生的问题?目前是3个tomcat在同一服务器,以后可能用更多的tomcat在不同服务器上负载均衡,能否提高系统处理并发的性能?问题有点多,希望高手指点,分享你们的经验,谢谢!
webbench -c 1000 -t 60 http://doman.com/MyServlet?param=12345
Webbench - Simple Web Bench 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.Benching: GET http://doman.com/MyServlet?param=12345
1000 clients, running 60 sec.Speed=6426 pages/min, 1499541 bytes/sec.
Requests: 5207 susceed, 1219 failed.
webbench的测试结果,里面有1219挂掉的,ab的测试,1000次1000并发测试(ab -n 1000 -c 1000)时基本完成不了,800并发有时候能完成,500并发基本没问题。但ab的结果不稳定,比如1000并发时,有时候能完成800次请求,有时能完成500次,有时候甚至100个都完成不了。调整并发数量到500时也会出现这样的问题。无法完成时报错信息是apr_socket_recv: Connection reset by peer (104)下面是用ab测试,200并发1000次执行的结果。也有11个失败的Server Software: Apache/2.2.14
Server Hostname: domain.com
Server Port: 80Document Path: MyServlet?param=12345
Document Length: 17042 bytesConcurrency Level: 200
Time taken for tests: 11.480 seconds
Complete requests: 1000
Failed requests: 11
(Connect: 0, Receive: 0, Length: 11, Exceptions: 0)
Write errors: 0
Total transferred: 17280292 bytes
HTML transferred: 17044292 bytes
Requests per second: 87.11 [#/sec] (mean)
Time per request: 2296.027 [ms] (mean)
Time per request: 11.480 [ms] (mean, across all concurrent requests)
Transfer rate: 1469.96 [Kbytes/sec] receivedConnection Times (ms)
min mean[+/-sd] median max
Connect: 0 43 351.9 0 2999
Processing: 420 2141 619.7 2139 5440
Waiting: 371 2138 619.6 2135 5438
Total: 426 2184 743.2 2141 7162Percentage of the requests served within a certain time (ms)
50% 2141
66% 2313
75% 2441
80% 2506
90% 2804
95% 3341
98% 4373
99% 5362
100% 7162 (longest request)
麻烦大家帮我看看测试结果是什么意思。我有几个问题:
1. webbench里出现failure是什么意思,是否意味着高并发时有的访问会失败?如果访问失败,那用户是得到500或404报错信息,还是速度变慢?
2. ab测试无法通过是什么原因?
3. 1000并发数大概是多少平均每分钟访问量达到的?在webben参数里,1000并发运行60秒,这个测试数据合理吗?
4. 一个繁忙的网站,如果日访问量超过千万,并发的峰值能达到多少?
5. 还有什么方法可以解决高并发可能产生的问题?目前是3个tomcat在同一服务器,以后可能用更多的tomcat在不同服务器上负载均衡,能否提高系统处理并发的性能?问题有点多,希望高手指点,分享你们的经验,谢谢!
解决方案 »
- JSP显示图片问题
- Excel导入oracle的问题 在线求解
- 请问这是什么编码?
- weblogic中配置连接池,为何提示 JDBC driver is not on the CLASSPATH ?
- session 被覆盖了,请问怎么解决??
- 请教个如何获取这个连接是从什么地方嵌入点过来的
- 有个struts的问题,关于参数传递在action的
- 请教高手:关于excel文件的读写,最好给个例子!马上解贴!
- 我想用jsp和servlet实现以下功能,请各位DX指教有什么好的方法。
- 新手求助!!!myeclipse使用XMLWriter的时候,为什么XMLWriter提示构造方法没定义??
- 请问怎么通过js给textarea赋值?????
- 求助大神:类似于淘宝发布商品那种功能
Webbench - Simple Web Bench 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.Benching: GET http://doman.com/MyServlet?param=12345
200 clients, running 60 sec.Speed=5465 pages/min, 1574179 bytes/sec.
Requests: 5465 susceed, 0 failed.
Webbench - Simple Web Bench 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.Benching: GET http://doman.com/MyServlet?param=12345
1000 clients, running 60 sec.Speed=6426 pages/min, 1499541 bytes/sec.
Requests: 5207 susceed, 1219 failed.对于第一个问题,失败我估计是它GET请求得不到200 OK response
至于具体是404还是500,抓个它的返回包就能看出来了
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at sun.net.NetworkClient.doConnect(NetworkClient.java:163)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:394)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:529)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:233)
at sun.net.www.http.HttpClient.New(HttpClient.java:306)
at sun.net.www.http.HttpClient.New(HttpClient.java:323)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:860)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:801)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:726)
at org.apache.jmeter.protocol.http.sampler.HTTPSampler.sample(HTTPSampler.java:490)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1037)
at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1023)
at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:346)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:243)
at java.lang.Thread.run(Thread.java:619)
这个应该是可以修改tomcat的最长等待时间避免的吧,但有什么方法可以缩短高并发时的请求时间呢?系统的程序和数据库都做过优化,单一请求的时间大概在0.07--0.4秒左右,除了负载均衡,我不知道还有什么其他办法了。现在3个tomcat似乎和1个tomcat区别不是很大啊。有什么建议呢?谢谢!