2012-10-22 16 views
5

kiedy zacznę się mój projekt przez Tomcat lub żywica, mój projekt wygeneruje błąd: Pozorna impasuC3P0 pozornego impasu, kiedy mój startup kocur

Myślę, że błąd spowodowany przez C3P0 nie można podłączyć bazę danych, zmienić mój xml i zamień nazwę domeny na ip mojej bazy danych, a następnie rozpocznij projekt!

używam słuchacza przed moim pracy C3P0 i mogę dostać poprawną nazwę domeny i Ip, nie mogę znaleźć przyczyny pozornej impasu.

012-10-22 16:53:04 24344 WARN [Timer-0] com.mchange.v2.async.ThreadPoolAsynchronousRunner:624 - com[email protected]1e79aa -- APPARENT DEADLOCK!!! Complete Status: 
    Managed Threads: 3 
    Active Threads: 3 
    Active Tasks: 
     [email protected] (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0) 
     [email protected]f (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1) 
     [email protected] (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2) 
    Pending Tasks: 
     [email protected] 
     com.mchange.v2.resourcepool.Basi[email protected] 
Pool thread stack traces: 
    Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0,5,main] 
     java.net.PlainSocketImpl.socketConnect(Native Method) 
     java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) 
+0

jakiej bazy danych używasz? Wyrocznia? – user1516873

Odpowiedz

3

Brzmi jakbyś znalazł przyczynę: masz problemy z DNS, tak, że próby do wyszukiwania bazy danych przez zawieszenie nazwy, podczas łączenia się z bazą danych przez IP jest w porządku. Wyświetlane komunikaty c3p0 wskazują, że zawieszono próby uzyskania połączeń z bazy danych (to znaczy, że nie powiodły się one ani nie zawiodły w przypadku wyjątku). W końcu te wisiały na pulsie wątku wydechowego c3p0, a zobaczysz ostrzeżenia PRZECIWNA DEADLOCK.

Ustawienie sugerowane przez user1516873, statementCacheNumDeferredCloseThreads, jest przydatne, gdy widzisz, że zadania związane z oświadczeniami powodują zakleszczenia, ale jest mało prawdopodobne, aby pomóc w twojej sprawie. Powodujesz zawieszanie prób przez pulę, aby uzyskać połączenia z bazy danych.

Główną rzeczą, którą powinniśmy zrobić jest debugowanie problem DNS na serwerze web-app. Wypróbuj narzędzia, takie jak nslookup lub dig, i zobacz, czy możesz wyszukać serwer bazy danych według nazwy i czy wyniki są natychmiastowe, czy też zawiesiłeś się w odnośniku. Z tego, co opisujesz, najprawdopodobniej znajdziesz tam problem.

1

Jak opisano w dokumentacji: http://www.mchange.com/projects/c3p0/ sekcja Konfiguracja Oświadczenie poolingu

If statementCacheNumDeferredCloseThreads is greater than zero, the Statement pool will defer physically close()ing cached Statements until its parent Connection is not in use by any client or internally (in e.g. a test) by the pool itself. For some JDBC drivers (especially Oracle), attempts to close a Statement freeze if the parent Connection is in use. This parameter defaults to 0. Set it to a positive value if you observe "APPARENT DEADLOCKS" realted to Connection close tasks. Almost always, that value should be one: if you need more than one Thread dedicated solely to Statement destruction, you probably should set maxStatements and/or maxStatementsPerConnection to higher values so you don't churn through cached Statements so quickly.

Powiązane problemy