对于高并发应用程序,tomcat数据源的理想maxActive值是多少?

时间:2014-02-26 16:57:01

标签: sql-server tomcat connection-pooling

高并发应用程序的tomcat数据源的理想maxActive值是多少? 特别是在生产环境中。我的应用程序的数据库是SQL Server。

发送多个请求时,我目前看到以下错误:

java.util.concurrent.ExecutionException: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object 

将maxActive设置为-1可以解决我的问题,但这是生产环境的理想值吗?

1 个答案:

答案 0 :(得分:0)

我想,你真的要做基准测试。

我们对Tomcat进行了负载测试,并且惊讶于吞吐量大约是最大值。当我们最初认为maxActive的值应该高得多时,有10个并发连接。 (免责声明:这是一个内部应用程序,数据库运行在一个相对较小的盒子上。如果你在动力马上运行一个高并发应用程序,正确的值可能要高得多。)

HikariCP维基页面上有关池大小调整的背景信息,这些信息也适用于Tomcat附带的Apache DBCP:

https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing

它基本上说你应该将并发连接数设置为数据库实例可用CPU核心数的两倍。但同样,我会对您的应用进行加载测试,以确认该号码。

找到最佳池大小后,请考虑增加池的maxWait属性,以避免提及的CannotGetJdbcConnectionException异常。有关详细信息,请参阅DBCP的JavaDoc:

http://commons.apache.org/proper/commons-dbcp/api-1.4/org/apache/commons/dbcp/BasicDataSource.html#maxWait