SecularBird 2011-07-22
Tomcat有两种主要的HttpConnector
org.apache.coyote.http11.Http11Protocol
支持参数:maxThreads,minSpareThreads,maxSpareThreads,acceptCount
org.apache.coyote.http11.Http11NioProtocol
支持参数:maxThreads
后者加入了Nio的运用,据说能提升性能
为了验证效果,粗略进行了测试,方法:
1)新建测试Servlet,其中做100,000,000次空循环
2)测试程序对测试Servlet同时发起一定数量的Http请求,看请求的成功率
3)调整参数和请求数量进行多轮测试,比较测试结果
测试结果:
1)Http11Protocol
并发请求从200逐步增加至1000。
在并发500以下的阶段时,在运行稳定后还是可以达到较高的请求成功率(90以上),但需要对应调高参数,如在并发500时,maxThreads=500,acceptCount=166
在并发500以上的阶段时,并发数再继续增加,成功率会明显下降,报大量“拒绝连接”错误;即使调高参数,效果并不明显。
在并发1000阶段,maxThreads=500,acceptCount=166,运行稳定后成功率大概在80
在并发1000以上阶段,很容易出现OutOfMemory错误(没有调大JVM内存,估计是
Socket连接不断增加,有没有及时释放)
2)Http11NioProtocol
并发数一直增加至1500,成功率都很高(接近100)。而且当前线程数基本维持在100-200水平,并没有随着并发数的增加而成比例增加;测试完后,可以很快看到线程数很快下降;内存也没有出现错误。
初步来看,Http11Protocol应对大并发量还是力不从心;Http11NioProtocol的优化效果则较明显,运行稳定、有效率且资源控制得较好。可进一步在实际环境中应用,在深入分析。
测试环境:
OS:Win732bit
Tomcat:6.0.26
RAM:4G
CPU:P8700