定期的にエラーが発生します:
エラーJDBCExceptionReporter-> javax.resource.ResourceException:IJ000453:Javaの管理接続を取得できません:jboss/datasources/myDB 08:12:05,928エラー[org.Apache.catalina.core.ContainerBase。[jboss.web]。[ default-Host]。[/ mySoftware]。[jsp]](ajp--xx.255.0.yyy-8109-21)サーブレットjspのServlet.service()が例外をスローしました:javax.resource.ResourceException:IJ000655:管理された接続がありませんorg.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool.getConnection(SemaphoreArrayListManagedConnectionPool.Java:377)などの設定されたブロッキングタイムアウト(30000 [ms])内で使用可能.
。
それで、次のデータソース設定があります。 JBoss ASの場合:
<datasource jta="true" jndi-name="Java:jboss/datasources/myDB" pool-name="ssbs-pssbs" enabled="true" use-ccm="true">
<connection-url>jdbc:postgresql://xx.255.0.yyy/myDatabase</connection-url>
<driver-class>org.postgresql.Driver</driver-class>
<driver>postgresql-jdbc4</driver>
<pool>
<min-pool-size>30</min-pool-size>
<max-pool-size>150</max-pool-size>
<prefill>true</prefill>
<use-strict-min>false</use-strict-min>
<flush-strategy>FailingConnectionOnly</flush-strategy>
</pool>
<security>
<user-name>tick</user-name>
<password>tack</password>
</security>
<validation>
<check-valid-connection-sql>SELECT 1</check-valid-connection-sql>
<validate-on-match>false</validate-on-match>
<background-validation>false</background-validation>
</validation>
<timeout>
<blocking-timeout-millis>30000</blocking-timeout-millis>
<idle-timeout-minutes>5</idle-timeout-minutes>
</timeout>
<statement>
<share-prepared-statements>false</share-prepared-statements>
</statement>
</datasource>
私のPostgresサーバーでは、500でmax_connectionを許可しています。なぜこの例外が発生するのですか?
あなたの主な問題はおそらく接続リークですが、そうではないかもしれません。つまり、データベーストランザクションはプールを離れ、返されません。この場合、問題はおそらくコードの問題であり、データベースの問題ではないため、最初にいくつかの特定の事柄があります。
最初に確認することは、pg_stat_activity
のすべての現在のステータスです。これには、最新のクエリとトランザクションの状態が含まれます。接続リークでは、同様のクエリを使用した多数のIDLE
接続が見つかる可能性があります。クエリは、接続リークを追跡するのに役立ちます。また、接続リークでは、問題が発生すると、再起動するまで問題が継続します。
問題が実際に利用可能な接続が少なすぎる場合、ACTIVE
接続がたくさん表示されます。その場合は、プール内の接続数を増やしてください。この場合も、問題は断続的に発生し、それ自体が単独で発生するように見えます。