在apache-tomcat-5.5/conf/server.xml文件下,可以找到如下信息
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
上面就是tomcat默认属性的设置
minSpareThreads="25" 表示即使没有人使用也开这么多空线程等待
maxSpareThreads="75" 表示如果最多可以空75个线程,例如某时刻有80人访问,之后没有人访问了,则tomcat不会保留80个空线程,而是关闭5个空的.
connectionTimeout="20000" 网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒
首先说明的是,影响tomcat最大连接数的属性是:
maxThreads="150" 表示最多同时处理150个连接
acceptCount="100" 当同时连接的人数达到maxThreads时,还可以接收排队的连接,超过这个连接的则直接返回拒绝连接。
如果想让tomcat获得更大或者更小的连接数,那就需要把这两个属性同时修改。
现在来开始进行测试
1,测试tomcat与mysql的最大连接数的关系
tomcat5.5默认的最大连接数是150,没有定论,不过一般最大设为200就行了.
mysql默认的最大连接数是100,最大可以达到16384.
测试开始:
1)设置tomcat属性
maxThreads="50"
acceptCount="50"
mysql默认连接100
此次操作是并发查询
看到上面的参数大家应该想到的最大连接数应该是50,可测试结果可不是这样的,
测试的最大连接是100,有的时候也能超过100,但经常抛异常:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections"
结论:
虽然tomcat设置了最大连接数,但主要根据的是mysql的最大连接数
2)设置tomcat属性
maxThreads="200"
acceptCount="200"
mysql默认连接500
此次操作是并发查询,
并发请求300次,发生异常,严重: All threads (200) are currently busy, waiting. Increase maxThreads (200) or check the servlet status
结论:测试人数应不大于tomcat最大连接