2013-07-04 20 views
16

Periyodik i almak hatası:yok yönetilen bağlantıları

HATA JDBCExceptionReporter -> javax.resource.ResourceException: IJ000453: java için açılamıyor yönetilen almak için bağlantısı: jboss/datasources/myDB 08: 12: 05,928 HATA [org.apache.catalina.core.ContainerBase. [jboss.web]. [varsayılan ana bilgisayar]. [/ mySoftware]. [jsp]] (ajp - xx. 255.0.yyy-8109-21) Servlet.service(), sunucu jsp'si için istisnayı attı: javax.resource.ResourceException: IJ000655: yapılandırılmış engelleme zaman aşımı (30000 [ms]) adresinde yönetilen bağlantı bulunamadı. Org.jboss.jca.core .connectionmanager.pool.mcp.SemaphoreArrayListM anagedConnectionPool.getConnection (SemaphoreArrayListManagedConnectionPool.java:377) vb

.

Başka bir veri kaynağı yapılandırmam var. JBoss AS üzerinde: ben bu istisna almak Neden

<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> 

ve benim Postgres sunucusunda

i 500 üzerine max_connection izin?

+0

Havuzdaki tüm yönetilen bağlantılar kullanımda gibi görünüyor mu? 30000 [ms] oldukça büyük bir gecikme. Kullanıldıktan sonra bağlantıyı doğru bir şekilde serbest bırakıp bırakmadığınızı, veritabanı üzerinde ortalama işlemin ne kadar sürdüğünü ve elbette ne kadar çok iş parçacığının bağlantı kurulmaya çalıştığını kontrol ederim. –

+0

ve bunun için çalışıyorsunuz çünkü uygulama sunucunuzun yapılandırılmış 150 bağlantı sınırına ulaşıyorsunuz. Bu bağlantılarla nasıl etkileşiyorsunuz? düz JDBC? JPA? –

+0

Hibernate 3.6 kullanıyorum. 2 uygulama postgres sunucusunda bir veritabanı kullanın. Her iki günde bir yazdığım "java için yönetilen bağlantı alınamıyor: jboss/datasources/myDB 08: 12: 05,928 HATA", genellikle 2 uygulama "max" DB'ye 250 bağlantıyı kullanabilir. 500 bağlantım var ama hata alıyorum. Pgadmin üzerinden "istatistik sunucu" raporu oluşturmanın yanı sıra çok fazla bağlantının "Commit" statüsüne sahip olduğunu ve sonsuza dek statüde kaldıklarını görüyorum. – Benjamin

cevap

2

Birincil sorununuz büyük olasılıkla bağlantı sızıntısıdır, ancak belki de değil. Diğer bir deyişle, veritabanı işlemleri havuzdan ayrılıyor ve iade edilmiyor. Bu durumda, sorun, büyük olasılıkla bir kod sorun ve veritabanı sorun olduğundan, başlamak için belirli bazı şeyler vardır.

Kontrol edilecek ilk şey, pg_stat_activity numaralı telefondaki her şeyin güncel durumu. Bu en yeni sorguyu ve işlem durumunu içerir. Bağlantı sızıntısında, muhtemelen benzer sorgularla çok sayıda IDLE bağlantı bulacaksınız. Sorgular, bağlantı sızıntısını izlemenize yardımcı olabilir. Ayrıca bir bağlantı sızıntısında, sorun başladığında, işleri yeniden başlatana kadar devam eder.

Sorun aslında çok az bağlantı olduğu durumda, o zaman çok sayıda ACTIVE bağlantı göreceksiniz. Bu durumda havuzunuzdaki bağlantı sayısını artırın. Ayrıca bu durumda, sorun zaman zaman ortaya çıkacak ve kendi başına kendi başına gidecektir.