tomcat默认的连接是线程阻塞的,即protocol配置为"HTTP/1.1"。那么tomcat的最大连接数就受maxThreads和account的限制,
maxThreads是最大的线程数,account是线程等待数,当连接数量达到maxThreads时,就把多余的连接放入account中。当连接数大于maxThreads+account时,连接被拒绝。maxThreads的默认值是200,account的默认值是100。
通过修改maxThreads和account的值可以增加tomcat的最大连接数。但是这个数值还受限于系统的最大句柄数。要是项目需要的并发量超过了系统的最大句柄数,那就只能修改系统的最大句柄数。Linux的默认最大句柄数是1024.
tomcat的线程连接还可以设置为线程非阻塞,即 protocol="org.apache.coyote.http11.Http11NioProtocol"
那么tomcat的最大连接数就是系统的最大句柄数。当配置为Nio时,不要加上maxThreads account等属性,否则会报错!
http://hi.baidu.com/latjo/blog/item/f939e925a76c88064d088d63.html
Tomcat从5.5版本开始,支持以下四种Connector的配置分别为:
<Connector port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443"/>
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000"
redirectPort="8443"/>
<Connector executor="tomcatThreadPool"
port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector executor="tomcatThreadPool"
port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />
我们姑且把上面四种Connector按照顺序命名为 NIO, HTTP, POOL, NIOP
为了不让其他因素影响测试结果,我们只对一个很简单的jsp页面进行测试,这个页面仅仅是输出一个Hello World。假设地址是 http://tomcat1/test.jsp
我们依次对四种Connector进行测试,测试的客户端在另外一台机器上用ab命令来完成,测试命令为: ab -c 900 -n 2000 http://tomcat1/test.jsp,最终的测试结果如下表所示(单位:平均每秒处理的请求数):
NIO HTTP POOL NIOP
281 65 208 365
666 66 110 398
692 65 66 263
256 63 94 459
440 67 145 363
由这五组数据不难看出,HTTP的性能是很稳定,但是也是最差的,而这种方式就是Tomcat的默认配置。NIO方式波动很大,但没有低于280 的,NIOP是在NIO的基础上加入线程池,可能是程序处理更复杂了,因此性能不见得比NIO强;而POOL方式则波动很大,测试期间和HTTP方式一 样,不时有停滞。
由于linux的内核默认限制了最大打开文件数目是1024,因此此次并发数控制在900。
maxThreads是最大的线程数,account是线程等待数,当连接数量达到maxThreads时,就把多余的连接放入account中。当连接数大于maxThreads+account时,连接被拒绝。maxThreads的默认值是200,account的默认值是100。
通过修改maxThreads和account的值可以增加tomcat的最大连接数。但是这个数值还受限于系统的最大句柄数。要是项目需要的并发量超过了系统的最大句柄数,那就只能修改系统的最大句柄数。Linux的默认最大句柄数是1024.
tomcat的线程连接还可以设置为线程非阻塞,即 protocol="org.apache.coyote.http11.Http11NioProtocol"
那么tomcat的最大连接数就是系统的最大句柄数。当配置为Nio时,不要加上maxThreads account等属性,否则会报错!
http://hi.baidu.com/latjo/blog/item/f939e925a76c88064d088d63.html
Tomcat从5.5版本开始,支持以下四种Connector的配置分别为:
<Connector port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443"/>
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000"
redirectPort="8443"/>
<Connector executor="tomcatThreadPool"
port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector executor="tomcatThreadPool"
port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />
我们姑且把上面四种Connector按照顺序命名为 NIO, HTTP, POOL, NIOP
为了不让其他因素影响测试结果,我们只对一个很简单的jsp页面进行测试,这个页面仅仅是输出一个Hello World。假设地址是 http://tomcat1/test.jsp
我们依次对四种Connector进行测试,测试的客户端在另外一台机器上用ab命令来完成,测试命令为: ab -c 900 -n 2000 http://tomcat1/test.jsp,最终的测试结果如下表所示(单位:平均每秒处理的请求数):
NIO HTTP POOL NIOP
281 65 208 365
666 66 110 398
692 65 66 263
256 63 94 459
440 67 145 363
由这五组数据不难看出,HTTP的性能是很稳定,但是也是最差的,而这种方式就是Tomcat的默认配置。NIO方式波动很大,但没有低于280 的,NIOP是在NIO的基础上加入线程池,可能是程序处理更复杂了,因此性能不见得比NIO强;而POOL方式则波动很大,测试期间和HTTP方式一 样,不时有停滞。
由于linux的内核默认限制了最大打开文件数目是1024,因此此次并发数控制在900。