2013-07-04 3 views
16

주기적으로 내가 얻을 오류 :없음 관리 연결

오류 JDBCExceptionReporter -> javax.resource.ResourceException : IJ000453 : 자바에 대한 수 없습니다 관리하려면 연결 : jboss/datasources/myDB 08 : 12 : 05,928 ERROR [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 : 구성된 차단 시간 초과 (30000 [ms]) 내에 관리 연결이 없습니다. org.jboss.jca.core .connectionmanager.pool.mcp.SemaphoreArrayListM anagedConnectionPool.getConnection (SemaphoreArrayListManagedConnectionPool.java:377) 등

.

그럼, 다음 데이터 소스 설정이 있습니다. 보스 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> 

내 포스트 그레스 서버에

나는 500 에 max_connection을 허용?

+0

풀에서 관리되는 모든 연결이 사용중인 것 같습니다. 30000 [ms]은 꽤 큰 지연입니다. 나는 그것이 사용 된 후에 올바르게 연결을 해제했는지, 데이터베이스에서 평균 트랜잭션을 얼마나 오래 걸릴지 그리고 물론 얼마나 많은 쓰레드가 연결을 취하려고 하는지를 확인할 것입니다. –

+0

이고 앱 서버가 구성한 150 개의 연결 제한을 초과하기 때문에이를 실행하고 있습니다. 어떻게 이러한 연결과 상호 작용합니까? 일반 JDBC? JPA? –

+0

나는 최대 절전 모드 3.6을 사용하고있다. 2 응용 프로그램은 postgres 서버에서 하나의 데이터베이스를 사용합니다. 2 일마다 "java : jboss/datasources/myDB 08 : 12 : 05,928 ERROR"에 대한 관리 연결을 얻을 수 없습니다. 일반적으로 2 개의 응용 프로그램 "max"는 DB에 250 개의 연결을 사용할 수 있습니다. 500 연결이 있지만 오류가 발생합니다. 뿐만 아니라 pgadmin을 통해 "통계 서버"보고서를 작성하고 많은 연결 상태가 "커밋"인지를 확인하고 상태를 영원히 유지합니다. – Benjamin

답변

2

주 문제는 연결 유출 일 가능성이 있지만 어쩌면 아닙니다. 즉, 데이터베이스 트랜잭션이 풀을 벗어나 리턴되지 않습니다. 이 경우 문제는 아마도 코드이며 문제가 아닌 데이터베이스 문제 일 수 있으므로 몇 가지 구체적인 사항이 있습니다.

가장 먼저 확인해야 할 것은 모든 현재 상태가 pg_stat_activity입니다. 여기에는 가장 최근의 쿼리 및 트랜잭션 상태가 포함됩니다. 연결 유출에서는 비슷한 쿼리를 사용하는 많은 수의 IDLE 연결을 찾을 수 있습니다. 쿼리는 연결 유출을 추적하는 데 도움이됩니다. 또한 연결 누출에서 문제가 시작되면 다시 시작할 때까지 계속됩니다.

문제가 실제로 사용 가능한 연결 수가 너무 적 으면 ACTIVE 연결이 많이 표시됩니다. 이 경우 풀에있는 연결 수를 늘리십시오. 이 경우에도 문제는 간헐적으로 발생하고 그 자체로 모든 문제가 발생합니다.