高并发应用程序的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可以解决我的问题,但这是生产环境的理想值吗?
答案 0 :(得分:0)
我想,你真的要做基准测试。
我们对Tomcat进行了负载测试,并且惊讶于吞吐量大约是最大值。当我们最初认为maxActive
的值应该高得多时,有10个并发连接。 (免责声明:这是一个内部应用程序,数据库运行在一个相对较小的盒子上。如果你在动力马上运行一个高并发应用程序,正确的值可能要高得多。)
HikariCP维基页面上有关池大小调整的背景信息,这些信息也适用于Tomcat附带的Apache DBCP:
https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing
它基本上说你应该将并发连接数设置为数据库实例可用CPU核心数的两倍。但同样,我会对您的应用进行加载测试,以确认该号码。
找到最佳池大小后,请考虑增加池的maxWait
属性,以避免提及的CannotGetJdbcConnectionException
异常。有关详细信息,请参阅DBCP的JavaDoc: