मैं एक Oracle 11g डेटाबेस से कनेक्ट करने के लिए एक डेटा स्रोत का उपयोग करता है बिलाव 7.0.54 के लिए तैनात एक वेब एप्लिकेशन है विफल रहा है। डेटास्रोत META-INF/context.xml
में कॉन्फ़िगर किया गया है और मैंने ojdbc7.jar को <tomcat-install-dir>/lib
में रखा है। मैं एक जेएनटीआई लुकअप का उपयोग करता हूं जिसे मैं एक सिंगलटन में संग्रहीत डेटासोर्स को पुनर्प्राप्त करने के लिए करता हूं ताकि प्रत्येक डीएओ कक्षा इसका उपयोग कर सके।मेमोरी रिसाव - oracle.jdbc.driver धागा बंद करने के लिए
सब कुछ उम्मीद के रूप में काम करता है, लेकिन जब मैं आवेदन undeploy (बिलाव प्रबंधक एप्लिकेशन के माध्यम से) मैं लॉग में देखें:
Oct 03, 2014 3:06:55 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/myapp] appears to have started a thread named [oracle.jdbc.driver.BlockSource.ThreadedCachingBlockSource.BlockReleaser] but has failed to stop it. This is very likely to create a memory leak.
Oct 03, 2014 3:06:57 PM org.apache.catalina.startup.HostConfig undeploy
INFO: Undeploying context [/myapp]
जब मैं डिबग मैं देख सकता हूँ इस सूत्र के रूप में जल्द डेटाबेस है के रूप में बनाया जाता है एक्सेस किया गया (डेटासोर्स के माध्यम से)।
मेरे डेटा स्रोत config:
<Context antiResourceLocking="false">
<Resource name="jdbc/myapp" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
maxActive="20" maxIdle="10" maxWait="-1"
username="myuser" password="mypass"
url="jdbc:oracle:thin:@myserver:1521:mysid"
removeAbandoned="true" removeAbandonedTimeout="10" logAbandoned="true"
validationQuery="SELECT 1 FROM DUAL"
testOnBorrow="true" testOnReturn="true" testWhileIdle="true"
timeBetweenEvictionRunsMillis="1800000" numTestsPerEvictionRun="3"
minEvictableIdleTimeMillis="1800000"
/>
</Context>
संपादित
आगे की जांच से पता चला है कि समस्या इसलिए होती डेटा स्रोत के दौरान आवेदन (या सर्वलेट) initialisation एक्सेस किया जाता है कि क्या है या नहीं किया है।
वास्तविक तथ्य में, समस्याग्रस्त धागा केवल बनाया गया है, और इस प्रकार ओरेकल के जेडीबीसी ड्राइवरों (या तो ojdbc6.jar या ojdbc7.jar) के 12 सी संस्करणों का उपयोग करते समय समस्या केवल मौजूद है।
अगर मैं की ojdbc6.jar धागा कभी नहीं बनाई गई है 11.2.0.4 संस्करण और स्मृति रिसाव चेतावनी कभी नहीं दिखाई देता है इस्तेमाल करने लगी।
मैं डाउनग्रेड करना होगा JDBC ड्राइवर (के रूप में https://stackoverflow.com/a/9177263/4105953 में सुझाव दिया)?
सुनिश्चित करें कि आपका ऑरैक ड्राइवर 'वेब-आईएनएफ/lib' निर्देशिका में भी नहीं है। जैसे ही ऑटो रजिस्टर होगा और ओरेकल जेडीबीसी सामानों में से कुछ शुरू करेगा। यह भी देखें [http://stackoverflow.com/questions/3320400/to-prevent-a-memory-leak-the-jdbc-driver-has-been-forcibly-unregistered)। –
@ एम। डीनियम धन्यवाद, लेकिन मैंने पहले ही यह सुनिश्चित कर लिया है कि जेडीबीसी चालक केवल 'टोमकैट/lib' में है और एप्लिकेशन का' वेब-आईएनएफ/lib' – finchie