2008-08-19 26 views
13

मेरे पास एक टोमकैट इंस्टेंस सेटअप है लेकिन डेटाबेस कनेक्शन जो मैंने config.xml में कॉन्फ़िगर किया है निष्क्रियता की अवधि के बाद मर रहा है।जावा + टोमकैट, डेटाबेस कनेक्शन मर रहा है?

मैं लॉग मैं निम्नलिखित त्रुटि मिलती है की जांच करते हैं:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: पिछले पैकेट was68051 सेकंड पहले सर्वर से सफलतापूर्वक प्राप्त किया। सर्वर पर सफलतापूर्वक भेजा गया अंतिम पैकेट 68051 सेकेंड पहले था, जो 'wait_timeout' के सर्वर कॉन्फ़िगर किए गए मान से अधिक लंबा है। आपको अपने आवेदन में उपयोग करने से पहले कनेक्शन वैधता का परीक्षण करना चाहिए और/या क्लाइंट टाइमआउट के लिए सर्वर कॉन्फ़िगर किए गए मानों को बढ़ाने या इस समस्या से बचने के लिए कनेक्टर/जे कनेक्शन प्रॉपर्टी 'autoReconnect = true' का उपयोग करना चाहिए।

यहाँ context.xml में विन्यास है:

<Resource name="dataSourceName" 
     auth="Container" 
     type="javax.sql.DataSource" 
     maxActive="100" 
     maxIdle="30" 
     maxWait="10000" 
     username="username" 
     password="********" 
     removeAbandoned = "true" 
     logAbandoned = "true" 
     driverClassName="com.mysql.jdbc.Driver" 
     url="jdbc:mysql://127.0.0.1:3306/databasename?autoReconnect=true&amp;useEncoding=true&amp;characterEncoding=UTF-8" /> 

मैं उपयोग कर रहा हूँ autoReconnect = संरचना त्रुटि करने के लिए कहते हैं की तरह है, लेकिन कनेक्शन मर रहता है। मैंने पहले कभी ऐसा नहीं देखा है।

मैंने यह भी सत्यापित किया है कि सभी डेटाबेस कनेक्शन ठीक से बंद हो रहे हैं।

उत्तर

8

Tomcat Documentation

DBCP जकार्ता-कॉमन्स डाटाबेस कनेक्शन पूल का उपयोग करता है। यह जकार्ता-कॉमन्स घटकों की संख्या पर निर्भर करता है:

* Jakarta-Commons DBCP 
* Jakarta-Commons Collections 
* Jakarta-Commons Pool 

यह विशेषता आपकी मदद कर सकती है।

removeAbandonedTimeout="60" 

मैं एक ही कनेक्शन पूलिंग सामान का उपयोग कर रहा है और मैं इन गुणों की स्थापना कर रहा हूँ एक ही बात यह सिर्फ बिल्ला के माध्यम से कॉन्फ़िगर नहीं किया गया है को रोकने के लिए। लेकिन अगर पहली चीज काम नहीं करती है तो इन्हें आजमाएं।

testWhileIdle=true 
timeBetweenEvictionRunsMillis=300000 
+0

अच्छा। मैंने context.xml में पैरामीटर सेट किए हैं, और मैं इसे 24 घंटों तक बैठने जा रहा हूं। अगर यह काम नहीं करता है तो मैं जवाब को अस्वीकार कर दूंगा। लेकिन यह आशाजनक लग रहा है! धन्यवाद! –

0

मैं कि क्या इसके बाद के संस्करण जवाब मूल रूप से एक ही बात करता है, लेकिन हमारी प्रणाली के कुछ सप्ताह में एक बार के बारे में डीबी कनेक्शन का उपयोग और मैंने देखा है कि हम एक -Otimeout झंडा या उस के कुछ प्रदान करते हैं पता नहीं है कनेक्शन टाइमआउट सेट करने के लिए mysql को सॉर्ट करें।

5

बस यह स्पष्ट करने के लिए कि वास्तव में इसका क्या कारण है। डिफ़ॉल्ट रूप से MySQL निष्क्रियता के 8 घंटे बाद खुले कनेक्शन को समाप्त करता है। हालांकि डेटाबेस कनेक्शन पूल उस से अधिक समय तक कनेक्शन बनाए रखेगा।

तो समय निर्धारित करके BationweenEvictionRunsMillis = 300000 आप कनेक्शन पूल को कनेक्शन के माध्यम से चलाने के लिए निर्देश दे रहे हैं और हर 5 मिनट में निष्क्रिय लोगों को बेदखल और बंद कर देते हैं।

+0

इस संपत्ति का नाम क्या है? मैं इसे दोबारा जांचना चाहता हूं। "thread_pool_idle_timeout = 60" मैं देखता हूं। – mass

+0

@ मास मुझे कोई जानकारी नहीं है। मेरा उत्तर 7 साल पुराना है और मैंने कुछ वर्षों से टॉमकैट या सर्वलेट संसाधन का अधिक उपयोग नहीं किया है।जहां तक ​​मैं समय बता सकता हूं BetweenEvictionRunsMillis context.xml में संसाधन टैग की एक प्रॉपर्टी है और thread_pool_idle_timeout एक .property फ़ाइल कुंजी है। –

+0

अभी तक जहां तक ​​मुझे समय निर्धारित करने के बारे में पता है BetweenEvictionRunsMillis अभी भी jdbc डेटासॉर पूल के लिए कनेक्शन स्वीपर को बंद कर देता है। thread_pool_idle_timeout हालांकि एक MySQL पैरामीटर था जिसका मैं जिक्र कर रहा था। मुझे संदेह है कि मौजूदा डिफ़ॉल्ट 8 घंटे से कम हैं लेकिन वैसे भी जवाब देने के लिए धन्यवाद। लगता है कि स्वीकार किए गए समाधान ने ओपी के लिए काम किया है, मैं इसे जाने दूंगा। – mass

1

हटाए गए विकल्प को डीबीसीपी 1.2 के रूप में बहिष्कृत किया गया है (हालांकि 1.3 शाखा में still present)। Here एक गैर-आधिकारिक स्पष्टीकरण है।