现有如下需求:
对一个web应用进行压力测试,要求并发量700。
--------------------------------------------------------------------
环境工具:
web服务器用的是Tomcat7。
压力测试工具用的是LoadRunner 11。
--------------------------------------------------------------------
Tomcat7的配置:
LoadRunner的脚本只写了一个Action,init和end都是未写东西,Action脚本如下:
LoadRunner场景运行配置:压15分钟,用户每2秒增加5个,最多增加到700。
--------------------------------------------------------------------
问题来了。。。。。。
当LoadRunner的用户增加到350的时候,就开始出错了,具体出错信息如下:
Action.c(4): Error -27796: Failed to connect to server "192.168.1.90:9001":
这个意思是Tomcat直接拒绝了请求?可是我的Tomcat明明配置的是300线程,还有300等待请求,等于是300+300=600。 就算是拒绝请求也要等到用户并发量到达600之后啊,为什么每次压到350就开始报错呢,还是我的配置有问题呢?
请各位指教!
------解决方案--------------------
纠正下,不是250个等待“线程”,而是等待的队列里面,还有250个空位。
只好用排除法了,尝试调整<connector>里面不同的数字,每次放大/缩小一个数字。再loadrunner(配置不变),看是否还报错,如果报错,是否数量有变化。
然后再尝试loadrunner配置调整。根据变化情况,再来帮你分析分析。
另外,还有件很重要的事情,请确认你connector的类型。因为protocol字段写HTTP/1.1的话,有可能对应2种不同的socket
org.apache.coyote.http11.Http11Protocol,block io(BIO)
org.apache.coyote.http11.Http11AprProtocol, Apr io (AIO)
如果你的PATH/LD_LIBRARY_PATH下有tomcat native library(tomcat/bin/tcnative-1.dll之类),优先用AIO,否则用BIO,
此外还有第三种,将protocol配置为
org.apache.coyote.http11.Http11NioProtocol,对应 non blocking io (NIO)
建议考虑显式指定NIO或AIO。不过,暂时没有明确证据表明选用哪种protocol与你的问题直接相关。
其他可以参考:http://tomcat.apache.org/tomcat-7.0-doc/config/http.html