प्रसंग: बादलSql सर्वर JDBC कनेक्शन रीसेट त्रुटि: केवल पर अमेज़न EC2
हम एक जावा आधारित वेब अनुप्रयोग है कि हम आम तौर पर हमारे अपने सर्वर पर होस्ट की है। हाल ही में हमने एक उदाहरण होस्ट करने के लिए अमेज़ॅन वेब सर्विसेज (एडब्ल्यूएस ईसी 2) क्लाउड का इस्तेमाल किया।
यह "क्लाउड सेटअप" हमारी विशिष्ट "साइट पर" सेटअप से मेल खाता है: ऐप सर्वर के लिए एक सर्वर, डेटाबेस सर्वर के लिए एक और सर्वर। (कई एप्लिकेशन सर्वर एक ही डाटाबेस सर्वर को इंगित)
समस्या इस बादल सेटअप में, हम "सहकर्मी त्रुटियों से कनेक्शन रीसेट" रुक-रुक कर प्राप्त डेटाबेस और JDBC ड्राइवर, जहां पर (प्रतीत होता है) यादृच्छिक अंतराल के बीच और कोडबेस में यादृच्छिक बिंदुओं पर, डेटाबेस कनेक्शन विफल रहता है।
यहाँ लॉग के लिए कुछ त्रुटि अंश हैं
स्टैक ट्रेस उदाहरण 1:
at com.participate.pe.genericdisplay.client.taglib.GenDisplayViewTag.doStartTag(GenDisplayViewTag.java:77)
... 75 more
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The connection is closed.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:170)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.checkClosed(SQLServerConnection.java:304)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.getMetaData(SQLServerConnection.java:1734)
at org.jboss.resource.adapter.jdbc.WrappedConnection.getMetaData(WrappedConnection.java:354)
स्टैक ट्रेस उदाहरण 2
at java.lang.Thread.run(Thread.java:619)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Connection reset
at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1368)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1355)
at com.microsoft.sqlserver.jdbc.TDSChannel.read(IOBuffer.java:1532)
at com.microsoft.sqlserver.jdbc.TDSReader.readPacket(IOBuffer.java:3274)
at com.microsoft.sqlserver.jdbc.TDSCommand.startResponse(IOBuffer.java:4437)
at com.microsoft.sqlserver.jdbc.TDSCommand.startResponse(IOBuffer.java:4389)
at com.microsoft.sqlserver.jdbc.SQLServerConnection$1ConnectionCommand.doExecute(SQLServerConnection.java:1457)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4026)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1416)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectionCommand(SQLServerConnection.java:1462)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.setAutoCommit(SQLServerConnection.java:1610)
at org.jboss.resource.adapter.jdbc.BaseWrapperManagedConnection.checkTransaction(BaseWrapperManagedConnection.java:429)
तकनीकी पर्यावरण
+०१२३५१६४१०- Jboss 4.2.2.GA (Jboss-वेब 2.0/बिलाव 6)
- MSSQL 2005 2.0 JDBC ड्राइवर
कुछ बिंदुओं
- हम कभी नहीं देखा है में यह समस्या हमारे स्वयं के पर्यावरण (यानी अपने डेटा केंद्र) कई वर्षों के लिए आवेदन चला रहे हैं
- इससे मुझे निष्कर्ष निकाला गया कि "अमेज़ॅन नेटवर्क पर्यावरण के साथ कुछ मजेदार चल रहा है"। मैं कुछ गलत/गायब हो सकता/सकती हूं।
- यह समस्या केवल हमारे आवेदन के साथ होती है। हमारे पास अन्य जावा और PHP अनुप्रयोग हैं जिनके पास यह समस्या नहीं है। अन्य जावा आवेदन एक अलग JDBC ड्राइवर का उपयोग करता है (jtds, afaik)
- यह एक सरल कनेक्शन समयबाह्य की तरह प्रतीत नहीं होता
प्रश्न
-Has किसी को भी इस से पहले देखा है? - अगर यह एक ईसी 2 "ज्ञात मुद्दा" है, तो क्या हम समस्या के चारों ओर अपना रास्ता कॉन्फ़िगर कर सकते हैं (यानी सुनिश्चित करें कि सबकुछ अपने सबनेट या वर्चुअल प्राइवेट क्लाउड (वीपीसी) पर है? -कोई भी जेडीबीसी ड्राइवर सेटिंग्स इस समस्या को दूर करने के लिए?
** अद्यतन ** मैं बढ़ाया और इस प्रश्न पर इनाम वृद्धि हुई
सूचना के अतिरिक्त बिट पर है: दो वर्चुअल सर्वर (डेटाबेस और अनुप्रयोग सर्वर) अलग सबनेट पर थे - एक हॉप अर्थात्। दो सर्वरों के बीच।
गैर-क्लाउड वातावरण में हमारे पास दो शून्य सर्वर "शून्य होप्स" हैं।
हमारे होस्टिंग व्यवस्थापक ने कहा कि हमारे ईसी 2 उदाहरणों के सबनेट पर हमारा कोई नियंत्रण नहीं था। इससे मुझे आश्चर्य हुआ कि वर्चुअल प्राइवेट क्लाउड मदद करेगा। पहले से
धन्यवाद
क्या आपने जेडीबीसी ड्राइवर को जेटीडीएस में स्विच करने का प्रयास किया था? एक आसान प्रयास होना चाहिए। – MicSim
एक ड्राइवर परिवर्तन के लिए एक पूर्ण क्यू चक्र की आवश्यकता होगी। सिद्धांत रूप में, सभी जेडीबीसी चालक वही काम करते हैं (यानी "सिद्धांत में साम्यवाद कार्य करता है।") ... व्यावहारिक रूप से, उनके पास थोड़ी भिन्नताएं होती हैं .... इसलिए यह इस बिंदु पर हमारे लिए एक विकल्प नहीं है। – user331465
क्या आप अपने आवेदन में कई धागे में कनेक्शन साझा कर रहे हैं? या क्या फ़ायरवॉल जैसे नेटवर्क तत्व हैं जो प्रीसेट समय के बाद कनेक्शन छोड़ रहा है (मुझे डर है कि मैं ईसी 2 के बारे में जानकार नहीं हूं)? दूसरा स्टैक ट्रेस, चैनल से पढ़ने पर आईओएक्सप्शन का सामना करना पड़ रहा है। अपवाद को सही ढंग से संभाला नहीं गया था, क्योंकि अंतर्निहित तार्किक कनेक्शन (SQLServerConnection इंस्टेंस) स्वयं को पहले बंद कर दिया गया था। यह सुझाव देगा कि या तो तार्किक कनेक्शन साझा किया गया था, या अंतर्निहित भौतिक लिंक बाधित था। –