apache - Tomcat 连接池耗尽

标签 apache tomcat jdbc connection-pooling pooling

我在我的项目中使用 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。无法在 10 秒内获取连接,您的配置是 p.setMaxWait(10000);。请求线程在放弃等待连接之前等待 10 秒(10000 毫秒,maxwait)。

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

关于apache - Tomcat 连接池耗尽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29368032/

相关文章:

iPhone .htaccess 重定向循环

apache - 如何使用 lua 获取 HTTP 响应体?

java - 使用 Java Web 应用程序变得非常慢

java - native 库 sqljdbc_auth.dll 已在另一个类加载器中加载

java - 如何验证表中某列是否存在

java - 检查表是否存在

java - Tomcat 7 中的 JNDI 数据源配置

python - Flask 和 Apache2 : No module named app

java - JVM 的设置选项

tomcat - Windows下如何用特定的server.xml启动Tomcat?