Tomcat连接池已耗尽

我在项目中使用Apache Tomcat JDBC连接池。我很困惑,因为在重负载下,我一直看到以下错误:

12:26:36,410 ERROR [] (http-/XX.XXX.XXX.X:XXXXX-X) org.apache.tomcat.jdbc.pool.PoolExhaustedException: [http-/XX.XXX.XXX.X:XXXXX-X] Timeout: Pool empty. Unable to fetch a connection in 10 seconds, none available[size:4; busy:4; idle:0; lastwait:10000].

12:26:36,411 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/APP].[AppConf]] (http-/XX.XXX.XXX.X:XXXXX-X) JBWEB000236: Servlet.service() for servlet AppConf threw exception: org.jboss.resteasy.spi.UnhandledException: java.lang.NullPointerException

我的期望是,有了池,对新连接的请求将被保留在队列中,直到连接可用为止。相反,当池达到容量时,似乎拒绝了请求。这种行为可以改变吗?

谢谢,

达尔

这是我的池配置:

PoolProperties p = new PoolProperties();

p.setUrl("jdbc:oracle:thin:@" + server + ":" + port + ":" + SID_SVC);

p.setDriverClassName("oracle.jdbc.driver.OracleDriver");

p.setUsername(username);

p.setPassword(password);

p.setMaxActive(4);

p.setInitialSize(1);

p.setMaxWait(10000);

p.setRemoveAbandonedTimeout(300);

p.setMinEvictableIdleTimeMillis(150000);

p.setTestOnBorrow(true);

p.setValidationQuery("SELECT 1 from dual");

p.setMinIdle(1);

p.setMaxIdle(2);

p.setRemoveAbandoned(true);

p.setJdbcInterceptors(

"org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;"

+ "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer;"

+ "org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer");

回答:

如果您看到日志Timeout: Pool empty. Unable to fetch a connection in 10

seconds并且您的配置为,则此操作按设计/实现进行

p.setMaxWait(10000);。在放弃等待连接之前,请求线程等待10秒(10000毫秒,maxwait)。

现在,您有两个解决方案,增加maxActive连接的数量或检查是否存在任何连接泄漏/长时间运行的查询(这是您所不希望的)。

以上是 Tomcat连接池已耗尽 的全部内容, 来源链接: utcz.com/qa/424042.html

回到顶部