引起:com.ibm.websphere.ce.j2c.ConnectionWaitTimeoutException:连接不可用,超时等待180008

时间:2015-08-03 19:25:43

标签: java-ee websphere database-connection connection-pooling connection-timeout

我正在IBM WAS 7.0上运行我的多线程Struts应用程序,并在高峰加载期间获得以下异常。最初我将最大连接配置为50并将连接等待时间配置为180秒,但是当我收到此错误时,我将大量连接更改为70并将连接等待时间更改为600秒后进行了大量谷歌搜索以解决此问题,但仍然出现此错误有时在高峰负荷期间......

引起:com.ibm.websphere.ce.j2c.ConnectionWaitTimeoutException:连接不可用,超时等待180008

请有人帮助我。

2 个答案:

答案 0 :(得分:3)

感谢您的澄清!您看到的消息通常表示连接池已超出,并且有很多原因可以解决此问题。

如果在增加最大连接池大小后仍然看到问题,则可能存在连接泄漏问题。通常情况下,如果应用程序没有正确关闭连接,无论您增加最大连接大小有多高,它都会填满连接池。连接泄漏的良好指示是连接池无法自行恢复并且需要重新启动服务器。应用程序应遵循get / use / close模式以避免连接泄漏问题。

连接池最大化的另一个常见原因是数据库端是否存在性能问题。如果未正确配置数据库以处理来自WAS的负载,则可能导致连接池问题。如果有长时间运行的查询,这也会导致连接在WAS端保持打开的时间更长。

此外,如果您的应用程序不是专门设计为使用共享连接,并且WAS连接池使用共享连接,则可能会导致连接池最大化。默认情况下,WAS连接池设置为shared。如果您的应用程序不是专门为利用共享连接而设计的,则可能没有必要使用共享连接。您可以尝试更改为非共享连接,以查看它是否有所作为。为了帮助您,您的应用程序必须在连接上调用close。可以通过将globalConnectionTypeOverride自定义属性设置为unshared来将连接更改为非共享。这可以通过以下链接(“控制连接池共享”部分)上的说明来完成:

http://www14.software.ibm.com/webapp/wsbroker/redirect?version=matt&product=was-nd-dist&topic=tdat_conpoolman

此链接指出以下内容:

* Control connection pool sharing.
  You can use the defaultConnectionTypeOverride or globalConnectionTypeOverride connection pool custom property for a particular connection factory or data source to control connection sharing:
      o The defaultConnectionTypeOverride property changes the default sharing value for a connection pool. This property enables you to control connection sharing for direct queries. If resource references are configured for this data source or connection factory the resource reference's configurations take precedence over the defaultConnectionTypeOverride property settings. For example, if an application is doing direct queries and unshared connections are needed, set the defaultConnectionTypeOverride property to unshared.
      o The value specified for the globalConnectionTypeOverride custom property takes precedence over all of the other connection sharing settings. For example if you set this property to unshared, all connection requests are unshared for both direct queries and resource reference lookups. This property provides you with a quick way to test the consequences of moving all connections for a particular data source or connection factory to unshared or shared without changing any resource reference setting.

  If you specify values for both the defaultConnectionTypeOverride and the globalConnectionTypeOverride properties, only the values specified for the globalConnectionTypeOverride property are used to determine connection sharing type.
  To add these new custom properties to the settings for a data source or connection factory connection pool, a new connection pool custom property must be created. To add one of these properties to a data source, use the administrative console. Click Resources > JDBC > Data sources > select your data source from the list Additional properties > Connection pool properties > Connection pool custom properties > New. For other J2C or JMS connection factories, navigate to the connection factory definition in the administrative console. Then select Additional Properties > Connection pool > Connection pool custom properties > New. Now specify defaultConnectionTypeOverride or globalConnectionTypeOverride in the Name field and shared or unshared in the Value field.
  Important: The properties must be set in the Connection pool custom properties and not the general Custom propeties on the data source or connection factory.

您还可以查看以下链接,了解有关这些属性的更多信息:

http://www14.software.ibm.com/webapp/wsbroker/redirect?version=matt&product=was-nd-dist&topic=rdat_conpoolcustprops

以下链接提供了有关非共享与共享连接的一些背景信息:

http://www14.software.ibm.com/webapp/wsbroker/redirect?version=matt&product=was-nd-dist&topic=conshrnon

答案 1 :(得分:0)

可能存在一些可能导致“连接超时”值无法生效的不同问题。

您需要首先检查配置数据源的范围内的resources.xml文件。确保“连接超时”值确实设置为600.当重新启动服务器(JVM)时,WAS将使用此配置文件设置连接池值。您应该看到类似于以下内容的数据源:

<connectionPool xmi:id="ConnectionPool_10000025" connectionTimeout="180" maxConnections="10" minConnections="1" reapTime="180" unusedTimeout="1800" agedTimeout="0" purgePolicy="EntirePool" numberOfSharedPoolPartitions="0" numberOfUnsharedPoolPartitions="0" numberOfFreePoolPartitions="0" freePoolDistributionTableSize="0" surgeThreshold="-1" surgeCreationInterval="0" testConnection="false" testConnectionInterval="0" stuckTimerTime="0" stuckTime="0" stuckThreshold="0"/>

如果此处的值未设置为600,则说明为什么连接在180秒后仍然超时。您还应该能够验证设置的最大连接数。您可能希望使用管理控制台或wsadmin再次进行更改并重新启动服务器以验证更改是否生效。通常不建议手动更改这些值。

如果该值设置为600,则需要检查是否未在多个范围配置具有相同名称的数据源。如果在多个范围配置,则需要确保为所有范围更改值。应用程序服务器将使用在最低范围配置的数据源的连接池设置。如果在服务器和集群范围内都配置了数据源,则将使用服务器作用域数据源。从最低范围到最高范围,订单是:服务器&lt;群集&lt;节点&lt;细胞。

如果您没有在多个范围配置相同的数据源且值设置为600,则在启动服务器时可能会出现其他问题,即不允许正确选取数据源配置。