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

标签 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 可以解决我的问题,但这是生产环境的理想值吗?

最佳答案

我想,您真的必须进行基准测试。

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

在 HikariCP 的 wiki 页面上有关于池大小的很好的背景信息,这也应该适用于 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

关于sql-server - 对于高并发应用程序,tomcat 数据源的理想 maxActive 值是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22048094/

相关文章:

sql - 为什么在 'month' 中使用 'where' 时 SQL Server 返回不同的顺序?

java - 在 Elastic Beanstalk 中设置 networkaddress.cache.ttl 的推荐方法是什么?

redis - 服务栈.Redis : Unable to Connect: sPort:

asp.net - 数据库连接池大小合理限制?

sql-server - 为 SQL Server 集群开发

c# - 填: SelectCommand. 连接属性还没有初始化

c# - 我如何告诉 Dapper 在使用 "WHERE"的 "IN"子句中使用 varchar 作为参数列表?

java - 无法在浏览器中打开 WSDL

java - tomcat 错误 "too many open files"

java - JDBC连接池问题