我可以更改连接的max-pool-size,以及决定我应该将其设置为什么的内容?

时间:2009-03-01 07:15:44

标签: java

使用我们的J2EE应用程序遇到以下错误:

  

java.sql.SQLException:分配连接时出错。原因:正在使用的连接等于max-pool-size和expired max-wait-time。无法分配更多连接。

我如何知道应用程序当前使用了多少连接,以及为高流量应用程序设置的最佳连接池设置应该是什么?我可以更改它吗?如何确定应该将其设置为什么(是内存问题,带宽等)?

4 个答案:

答案 0 :(得分:5)

  

如何知道连接多少   应用程序目前正在使用

您没有提供足够的信息来回答这个问题。大多数应用服务器都会对此类内容进行某种JMX报告。或者,根据数据库,您可以找到当前打开的连接数。

  

什么应该是最佳连接   大量流量的池设置   应用程序了

高于你的水平?

上述当然假设您没有错误处理连接。我的意思是,如果你在代码中直接使用它们,你应该总是使用这个成语:

Connection conn = null;
try {
  conn = ... ; // get connection
  // do stuff
} finally {
  if (conn != null) try { conn.close(); } catch (Exception e) { }
}

如果您没有释放连接回池并且正在等待垃圾收集器清理并释放它们,那么您将使用更多实际需要的连接。

答案 1 :(得分:2)

您确定要关闭所需的一切吗?看看here

确保关闭进入finally块。您将在链接中看到此代码:

finally 
{
   closeAll(resultSet, statement, connection);
}

我帮助其他人找到了类似的问题(他们的内存问题反过来了......但是如果这个过程已经持续了很长时间就会有这个结果)他们没有关闭结果集或连接。

答案 2 :(得分:2)

首先要检查的是你是否有资源泄漏。尝试使用jconsole或jvisualvm进行监视,以了解您的应用程序的行为以及是否有任何东西出现在眼睛中。

然后实际的jdbc池连接本质上是Java EE容器特定的,因此您需要提供更多信息。

答案 3 :(得分:0)

我认为你可能需要检查自己一些问题,这里有一些要考虑的问题:

一个。您是否正确使用了连接,是否关闭它们并在使用后将它们返回池中?

B中。您使用长期运行的交易,例如与用户“对话”?如果用户终止他对应用程序的使用,他们可以挂起吗?

℃。您是否设计了适合您应用的数据访问?例如。你是否经常在重复读取的区域使用缓存技术?

d。你的连接池足够大吗? 5年前,我有一个应用程序,同时连接250个Oracle数据库,远远超出了你通常认为的开箱即用的数据库。在50上运行应用程序不起作用。

要提供更详细的答案,您需要提供有关该应用的更多信息。

祝你好运!