2009-05-07 20 views
9

क्या किसी के पास अलग कनेक्शन पुल कार्यान्वयन की प्रदर्शन विशेषताओं की तुलना में कोई जानकारी है?जेडीबीसी कनेक्शन पूल की प्रदर्शन तुलना

पृष्ठभूमि: मेरे पास एक ऐसा एप्लिकेशन है जो पृष्ठभूमि थ्रेड में डीबी अपडेट को उसी बॉक्स पर एक MySQL उदाहरण में चलाता है। अंतर्निहित अपवाद के कारण संचार लिंक विफलता: डेटा स्रोत com.mchange.v2.c3p0.ComboPooledDataSource का उपयोग करते हुए हमें कभी SocketExceptions देना होगा: com.mysql.jdbc.CommunicationsException

** BEGIN NESTED EXCEPTION ** 

java.net.SocketException 
MESSAGE: Broken pipe 

STACKTRACE: 

java.net.SocketException: Broken pipe 
     at java.net.SocketOutputStream.socketWrite0(Native Method) 

बढ़ाने से mysql कनेक्शन समयबाह्य आवृत्ति में वृद्धि हुई इन त्रुटियों में से।

ये त्रुटियां एक अलग कनेक्शन पूल (com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource) पर स्विच करने पर गायब हो गई हैं; हालांकि प्रदर्शन खराब हो सकता है और मेमोरी प्रोफाइल उल्लेखनीय रूप से है (हम कम, और बहुत बड़ा, सीसीपी पूल की तुलना में जीसी है)।

उत्तर

5

जो भी कनेक्शन पूल आप उपयोग करते हैं, आपको यह मानना ​​होगा कि कनेक्शन किसी भी समय यादृच्छिक रूप से बंद हो सकता है और आपके आवेदन को इसके साथ सौदा कर सकता है।

एक "विश्वसनीय" नेटवर्क पर एक लंबे समय से डीबी कनेक्शन के साथ मामले में, क्या अक्सर होता है कि ओएस कब तक कनेक्शन खुला हो सकता है के लिए एक समय सीमा लागू होता है, या समय-समय पर कुछ "कनेक्शन सफाई" कोड चलते हैं। लेकिन इसका कारण बहुत अधिक मायने रखता नहीं है - यह नेटवर्किंग जीवन का सिर्फ एक हिस्सा है जिसे आपको लगता है कि कनेक्शन "आपके पैरों के नीचे से खींचा जा सकता है" और तदनुसार इस परिदृश्य से निपट सकता है।

इसलिए दिया गया कि, मैं वास्तव में एक कनेक्शन पूल ढांचे के बिंदु को नहीं देख सकता जो आपको इस मामले को प्रोग्रामेटिक रूप से संभालने की अनुमति नहीं देता है।

(संयोग से, यह मेरे मामलों में से एक है जहां मुझे खुशी है कि मैं अपना खुद का कनेक्शन पूल कोड लिखता हूं; कोई काला बॉक्स रहस्यमय रूप से स्मृति नहीं खा रहा है, और "जादू पैरामीटर" खोजने के लिए मछली पकड़ने के लिए कोई भी नहीं है ...)

1

मुझे यह त्रुटि mysql & c3p0 के साथ पॉप अप की गई थी - मैंने विभिन्न चीजों की कोशिश की और अंततः इसे दूर कर दिया। मुझे याद नहीं है, लेकिन क्या हल हो सकता है यह autoReconnect झंडा एक ला

url="jdbc:mysql://localhost:3306/database?autoReconnect=true" 
+0

धन्यवाद, मुझे इसके संदर्भ मिलते हैं, हालांकि यह मेरी समस्या का समाधान नहीं करता है। +1 –

+0

<संपत्ति का नाम = "c3p0.idle_test_period"> 100 इसे आज़माएं - चूंकि mysql टाइमआउट द्वारा कनेक्शन बंद कर रहा है, इसलिए यह जांच प्रत्येक बार एक बार और कनेक्शन को जीवंत रखने के लिए आपके डीबी को पिंग करती है। – lucas

1

आप Apache DBCP की कोशिश की थी? मैं C3PO के बारे में पता नहीं है, लेकिन DBCP अलग अलग तरीकों से निष्क्रिय कनेक्शन संभाल कर सकते हैं:

  • यह पूल से निष्क्रिय कनेक्शन हटा सकते हैं
  • यह निष्क्रियता
  • की एक निश्चित अवधि के बाद निष्क्रिय कनेक्शन पर एक प्रश्न चला सकते हैं

यह जांच भी कर सकता है कि कनेक्शन पर इसे पूछने से पहले कनेक्शन को वैध करने से पहले वैध है या नहीं; अगर यह अपवाद हो जाता है, तो यह उस कनेक्शन को त्याग देता है और दूसरे के साथ प्रयास करता है (या यदि यह कर सकता है तो एक नया बनाता है)। रास्ता अधिक मजबूत है।

+0

जब तक डीबीसीपी में बहुत कुछ नहीं बदला गया है, तब तक हमने इसका परीक्षण किया है, इस http://commons.apache.org/dbcp/changes-report.html संख्या के आधार पर, हमने प्रदर्शन और हैंडलिंग शर्तों में डीबीसीपी को काफी कम पाया है। क्या आपने प्रॉक्सूल में देखा है? –

+0

क्या आप उस पर विस्तार कर सकते हैं? मैंने प्रॉक्सूल में संक्षेप में देखा और यह स्पष्ट नहीं था कि यह अद्यतित था, लेकिन इसके अलावा मैं इसके बारे में अपरिचित हूं। क्या आप अपने अनुभव के बारे में अधिक जानकारी के रूप में अधिक जानकारी पोस्ट कर सकते हैं? –

+0

@ स्टेव: डीबीसीपी एकलथ्रेड नहीं किया गया है। – BalusC

3

आप http://jolbox.com पर कुछ बेंचमार्क नंबरों पर एक नज़र डालना चाहते हैं - साइट कनेक्शन BoneCP, जो एक कनेक्शन पूल है जो C3P0 और DBCP दोनों से तेज़ है।

0

टूटी पाइप

मोटे तौर पर इसका मतलब है कि दूसरे पक्ष निरस्त किया गया है/टाइम आउट/कनेक्शन बंद कर दिया। क्या आप लंबे समय तक कनेक्शन नहीं रख रहे हैं? सुनिश्चित करें कि आपका कोड अंततः ब्लॉक में सभी जेडीबीसी संसाधनों (Connection, Statement और ResultSet) को ठीक से बंद कर रहा है।

mysql कनेक्शन समयबाह्य बढ़ाने से इन त्रुटियों की आवृत्ति में वृद्धि हुई।

ध्यान रखें कि यह टाइमआउट डीबी की टाइमआउट सेटिंग से अधिक नहीं है।

संबंधित मुद्दे