2011-08-24 13 views
6

मैं टॉमकैट में तैनात वेबपैप लिखने के लिए Play का उपयोग कर रहा हूं। चूंकि ऐप बहुत अधिक डेटा प्रोसेस नहीं करेगा क्योंकि मैं हाइबरनेट के साथ डिफ़ॉल्ट एच 2 डेटाबेस का उपयोग कर रहा हूं। जब मैं ऐप का एक नया संस्करण तैनात करना चाहता हूं, तो मैंने टोमकैट बंद कर दिया, पुराने वेबपैप और डब्ल्यूएआर को मिटा दिया, अपना नया युद्ध जोड़ें, और बैक अप शुरू करें।प्ले करें! H2 को सही ढंग से बंद नहीं करना

यह कुछ दिनों पहले तक काम करता था, जब मैंने डेटाबेस घटक जोड़ा। अब, मैं अक्सर ऐप को फिर से तैनात करने में असमर्थ हूं। जब मैं वर्ष निर्देशिका हटाएंगे, तो उसे इस संरचना के साथ पुनर्जीवित किया गया है:

$ ls -laR myapp/ 
myapp/: 
total 24 
drwxr-xr-x 3 root root 4096 Aug 24 17:20 . 
drwxr-xr-x 13 root root 4096 Aug 24 17:20 .. 
drwxr-xr-x 3 root root 4096 Aug 24 17:20 WEB-INF 

myapp/WEB-INF: 
total 24 
drwxr-xr-x 3 root root 4096 Aug 24 17:20 . 
drwxr-xr-x 3 root root 4096 Aug 24 17:20 .. 
drwxr-xr-x 3 root root 4096 Aug 24 17:20 application 

myapp/WEB-INF/application: 
total 24 
drwxr-xr-x 3 root root 4096 Aug 24 17:20 . 
drwxr-xr-x 3 root root 4096 Aug 24 17:20 .. 
drwxr-xr-x 3 root root 4096 Aug 24 17:20 db 

myapp/WEB-INF/application/db: 
total 24 
drwxr-xr-x 3 root root 4096 Aug 24 17:20 . 
drwxr-xr-x 3 root root 4096 Aug 24 17:20 .. 
drwxr-xr-x 2 root root 4096 Aug 24 17:20 h2 

myapp/WEB-INF/application/db/h2: 
total 24 
drwxr-xr-x 2 root root 4096 Aug 24 17:20 . 
drwxr-xr-x 3 root root 4096 Aug 24 17:20 .. 
-rw-r--r-- 1 root root 100 Aug 24 17:20 play.lock.db 

एक ही होता है जब युद्ध unzips।

मैंने हाल ही में catalina.out लॉग में एक संदेश देखा है जो मेरे ऐप के बारे में शिकायत करते हुए एक प्रक्रिया को बंद नहीं कर रहा है जिसे "एच 2 फाइल लॉक वॉचडॉग" कहा जाता है। एच 2 दस्तावेज़ों की एक संक्षिप्त खोज के आधार पर, मुझे लगता है कि प्रक्रिया मेरे ऐप में हस्तक्षेप कर रही है।

SEVERE: The web application [/myapp] appears to have started a thread named [H2 File Lock Watchdog /var/lib/apache-tomcat-6.0.32/webapps/myapp/WEB-INF/application/db/h2/play.lock.db] but has failed to stop it. This is very likely to create a memory leak.

तो, मैं इस प्रक्रिया को मारने करते हैं:

संपादित

यहाँ लॉग फ़ाइल में शिकायत लाइन है? मैं मशीन को पुनरारंभ नहीं कर सकता क्योंकि यह मेरा नहीं है, और मुझे top या ps के साथ वॉचडॉग नहीं मिल रहा है। मैं स्वचालित रूप से इसे बंद करने के लिए Play के लिए एक तरीका पसंद करूंगा, लेकिन मैं इसे अपनी तैनाती स्क्रिप्ट में बनाने से ऊपर नहीं हूं।

यदि आप इसे अभी तक पढ़ चुके हैं तो लाखों धन्यवाद!

+0

उल्लेख करने का एक और बिंदु यह है कि डेटाबेस प्रक्रिया स्पष्ट रूप से मर जाती है। मुझे यकीन नहीं है कि यह कितना समय लगता है, लेकिन यह घंटों के पैमाने पर है।इसे प्रतीक्षा करना केवल एक समाधान है, लेकिन कुछ भी बेहतर नहीं है? – andronikus

उत्तर

8

मैं बिल्ला शट डाउन

क्या आप वाकई पूरी तरह से बिल्ला को बंद कर रहे हैं? क्योंकि एच 2 डेटाबेस sill चल रहा है। यदि आप टॉमकैट प्रक्रिया को बंद करते हैं, तो डेटाबेस भी बंद हो जाता है (क्योंकि एच 2 टॉमकैट प्रक्रिया के भीतर चल रहा है)। अगर आप किसी भिन्न प्रक्रिया में डेटाबेस चलाते हैं।

या आपने को टॉमकैट के भीतर बस वेब एप्लिकेशन बंद कर दिया है? यदि ऐसा है, तो कम से कम एक डेटाबेस कनेक्शन बंद नहीं किया गया था, ताकि डेटाबेस चल रहा रहता है (और यह .lock.db फ़ाइल बनाता है)।

अब, मुझे नाटक ढांचे को नहीं पता है, और यह नहीं कह सकता कि सभी डेटाबेस कनेक्शन बंद कैसे हैं।

डेटाबेस को बंद करने के लिए मजबूर करने का एक तरीका SQL कथन SHUTDOWN चलाने के लिए है।

मैं ऊपर या ps साथ प्रहरी

top और ps केवल प्रक्रियाओं प्रदर्शित नहीं मिल सकता है। एच 2 वॉचडॉग एक जावा प्रक्रिया के भीतर धागा है। धागा देखने के लिए, उपयोग करें:

jps -l (to get the list of Java processes) 
jstack -l <pid> (to get a full thread dump) 
+0

मैं के साथ हमेशा की तरह 'श bin/shutdown.sh' सर्वर को बंद कर रहा हूँ। क्या मुझे कुछ और करना चाहिए? नाटक! फ्रेमवर्क स्वचालित रूप से इस तरह की चीज़ों को संभालने में कामयाब रहता है, इसलिए मुझे नहीं पता कि 'SHUTDOWN' कथन कैसे पास किया जाए। मैं सोमवार को जावा प्रक्रिया को मैन्युअल रूप से मारने की कोशिश करूंगा, और आशा करता हूं कि किसी के पैर की उंगलियों पर कदम न उठाएं। – andronikus

+0

दुर्भाग्यवश 'jps -l' केवल मुझे जेपीएस ही दिखाता है! – andronikus

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