2012-12-31 37 views
6

के साथ उपलब्ध है मेरे पास कंसोल एप्लिकेशन है जो निष्पादन के दौरान लटकता है।c3p0 प्रतीक्षा में लटकता है हाइबरनेट

"main" prio=10 tid=0x000000000168f800 nid=0x1c37 in Object.wait() [0x00007fa60d0ad000] 
    java.lang.Thread.State: WAITING (on object monitor) 
     at java.lang.Object.wait(Native Method) 
     - waiting on <0x00000007400f4c68> (a com.mchange.v2.resourcepool.BasicResourcePool) 
     at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1315) 
     at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:557) 
     - locked <0x00000007400f4c68> (a com.mchange.v2.resourcepool.BasicResourcePool) 
     at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:477) 
     at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525) 
     at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128) 
     at org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:84) 
     at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:281) 
     at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:297) 
     at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:169) 
     at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:67) 
     at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:160) 
     at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1392) 
     at org.kriyak.parser.IndexArchiveRapid.indexFile(IndexArchiveRapid.java:70) 
     at org.kriyak.parser.IndexArchiveRapid.main(IndexArchiveRapid.java:53) 

मैं केवल एक conencton खोल सकते हैं और ऐसा प्रतीत नहीं होता कि मैं उन्हें रिसाव:

cfg.setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver"); 
    cfg.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/db?user=db&password=db"); 
    cfg.setProperty("hibernate.connection.username", "db"); 
    cfg.setProperty("hibernate.connection.password", "db"); 
    cfg.setProperty("hibernate.connection.pool_size", "5"); 
    cfg.setProperty("hibernate.connection.autocommit", "false"); 
    cfg.setProperty("hibernate.c3p0.min_size", "5"); 
    cfg.setProperty("hibernate.c3p0.max_size", "20"); 
    cfg.setProperty("hibernate.c3p0.timeout", "300"); 
    cfg.setProperty("hibernate.c3p0.max_statements", "50"); 
    cfg.setProperty("hibernate.c3p0.idle_test_period", "3000"); 

यहाँ मेरी स्टैकट्रेस है: यहाँ मेरी विन्यास है। और मैं भी एक थ्रेड का उपयोग करता हूं। मैंने स्मृति उपयोग को छोड़कर किसी भी mysql सेटिंग्स को समायोजित नहीं किया है। MySQL कंसोल से ठीक काम करता है। ऐसा क्यों हो सकता है? क्या यह c3p0 त्रुटि है?

+0

क्या यह आपके आवेदन में एकमात्र धागा है? – parsifal

+0

हां, यह एकमात्र धागा –

उत्तर

13

क्या यह तुरंत होता है, या थोड़ी देर के बाद? यानी, चेकआउट शुरू में सफल होते हैं, लेकिन फिर इस तरह लटकाते हैं? यदि ऐसा है, तो यह एक कनेक्शन रिसाव की तरह दिखता है। कृपया c3p0 पैरा को अनवरोधित करने की कोशिश करें कनेक्शन कनेक्शनटाइमआउट और डीबग UnnurnurnConnectionStackTraces यह देखने के लिए कि कोई रिसाव है या नहीं। http://www.mchange.com/projects/c3p0/#configuring_to_debug_and_workaround_broken_clients, http://www.mchange.com/projects/c3p0/#unreturnedConnectionTimeout, http://www.mchange.com/projects/c3p0/#debugUnreturnedConnectionStackTraces देखें।

यदि यह तुरंत होता है, यदि कोई कनेक्शन सफलतापूर्वक चेक आउट नहीं किया गया है, तो सवाल यह है कि पूल कभी कनेक्शन प्राप्त करने में सफल होता है या नहीं। डिफ़ॉल्ट रूप से, यदि यह कभी सफल नहीं होता है, तो लगभग 30 सेकंड के बाद आपके धागे को विफलता के साथ तोड़ना चाहिए। (ऐसा नहीं लगता है कि आपने यह किया है, लेकिन यदि उदाहरण के लिए आप शून्य पर रीट्रीएट्रेप्ट्स सेट कर लेंगे, तो c3p0 कनेक्शन के लिए अनिश्चित काल तक प्रतीक्षा कर सकता है।)

c3p0 समस्याओं को डीबग करने के लिए, यह संस्करण को कैप्चर करने में सहायक है और कॉन्फ़िगरेशन जानकारी जो c3p0 पूल प्रारंभिकरण पर INFO स्तर पर लॉग इन करने के लिए डंप करती है।

शुभकामनाएं!

+0

है, मैं sess.close() खो रहा था। मैं आपका जवाब स्वीकार करता हूं। –

+0

मैं अंतर्निहित कनेक्शन बंद नहीं कर रहा था, जिसे मेरे मामले में स्पष्ट रूप से अनुरोध किया गया था। – Niranjan

3

इसके अलावा, आपने c3p0 के लिए चेकआउटटाइम पैरामीटर शुरू करने की प्रतीत नहीं की है, जो क्लाइंट को कनेक्शन पूल से कनेक्शन प्राप्त करने के लिए प्रतीक्षा करने की अवधि निर्दिष्ट करता है।

देखें http://www.mchange.com/projects/c3p0/#checkoutTimeout