2017-08-02 14 views
10

में मौजूद है, मेरे पास टॉमकैट सर्वर चल रहा है। और यह अचानक किसी कारण से दुर्घटनाग्रस्त हो जाता है ... हालांकि मैं त्रुटि खोजने की कोशिश कर रहा हूं।क्या कोई फ़ंक्शन पहले क्रैश() या पहले एक्साइट() जैसे टोमकैट या जावा

क्या beforeExit() या ifCrashed() जैसे टॉमकैट या जावा में कोई फ़ंक्शन है जिसे मैं ओवरराइड कर सकता हूं और कुछ कोड लिख सकता हूं जैसे सर्वर किसी कारण से क्रैश हो जाता है।

+0

आपने tomcat7 और tomcat8 को टैग किया है। आप वास्तव में किसका उपयोग कर रहे हैं? जावा के लिए ही। – Nathan

+0

वास्तव में वर्तमान में tomcat7 पर है लेकिन जल्द ही मैं उस संस्करण पर मौजूद होने पर tomcat8 में अपग्रेड कर दूंगा। – sanjeev

+0

जावा में [Thread.setUncaughtExceptionHandler] है (http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#setUncaughtExceptionHandler (java.lang.Thread.UncaughtExceptionHandler) जहां यदि कोई अनिवार्य अपवाद है तो आप कॉल करने के लिए एक विधि पंजीकृत कर सकते हैं।मुझे नहीं पता कि यह टॉमकैट के साथ काम करता है, – k3b

उत्तर

7

आप सिस्टम से बाहर निकलने वाले शट डाउन हुक का उपयोग करने का प्रयास कर सकते हैं। यह गारंटी नहीं है कि हालांकि यह SIGKILL की तरह एक मुश्किल दुर्घटना पर निष्पादित किया जाएगा, लेकिन यह कुछ मामलों में एक विकल्प हो सकता:

Runtime.getRuntime().addShutdownHook(new Thread() { 
    public void run() { 
     // Implementation goes here..; 
    } 
}); 
+0

यह सबसे अच्छा विकल्प है ... – sanjeev

2

मुझे नहीं लगता कि क्रैश सर्वर कुछ प्रबंधित कर सकता है। आप इन चरणों पर विचार कर सकते हैं:

  • सर्वलेट संदर्भ बंद होने से पहले कोड चलाने के लिए servletContextListeners का उपयोग करें। अगर शटडाउन शानदार ढंग से किया जाता है तो यह काम करेगा
  • यदि यह JVM है जो क्रश कर रहा है तो आप JVM निगरानी सेवाओं और रिपोर्टिंग प्रदान करने वाले टूल ढूंढने का प्रयास कर सकते हैं। इसके अलावा, मैं आदेश
  • आप सही कुछ नकली बाकी endpoint और कुछ बाहरी काम है कि endpoint समय-समय पर कॉल करेंगे और यह काम कर रहा है, तो यह HTTPStatus.OK तो वापस लौट आता है चला सकते हैं की निगरानी के लिए OutOfMemoryError और खुले JMX बंदरगाहों से रिपोर्ट प्राप्त करने के लिए ध्वज प्रदान करने के लिए सलाह देते हैं नहीं - तो आप स्वयं को किसी भी तरह रिपोर्ट कर सकते हैं।

यदि आप लॉग और कुछ सर्वर के साथ वास्तव में क्या हो रहा है, इसके बारे में कुछ जानकारी प्रदान कर सकते हैं तो यह बेहतर हो सकता है। शायद यहां लोग मदद करेंगे लेकिन मुझे लगता है कि यह एक और प्रश्नों का विषय है।

+0

मैं पहले से ही तीसरे तरीके का उपयोग कर रहा हूं ... लेकिन मुझे मतदान प्रकार से नफरत है – sanjeev

0

घातक दुर्घटना के मामले में, आपको एक जेवीएम लॉग मिलेगा। यदि यह है कि घातक नहीं है Oracle JVM

http://www.oracle.com/technetwork/java/javase/felog-138657.html

पर ErrorFile, आप इस तरह निर्दिष्ट के रूप में बेहतर प्रवेश स्तर, प्रदर्शित करने के लिए बिल्ला में लॉग एडजस्ट कर सकते हैं: आप बिल्ला एक -XX देकर स्थान निर्दिष्ट कर सकते उनके डॉक साइट पर

https://tomcat.apache.org/tomcat-6.0-doc/logging.html

यदि यह स्मृति त्रुटियों से बाहर की वजह से मर जाता है, तो आप यह OOM पर एक ढेर डंप प्राप्त कर सकते हैं, और यानी jhat साथ यह विश्लेषण

http://docs.oracle.com/javase/6/docs/technotes/tools/share/jhat.html

0

रूपरेखा आप के लिए JProfiler एक ऑफ़लाइन रूपरेखा मोड जहां आप जानकारी पर कब्जा कर सकते हैं एक विकल्प है चल रहे कार्यक्रम के बारे में और बाद में देखने के लिए इसे लॉग इन करें। दस्तावेज़ों को देखें JPRofiler Offline Profiling

इससे आपको एप्लिकेशन में क्या हो रहा है में कुछ और जानकारी मिल सकती है। इस दस्तावेज़ीकरण के अनुसार आप अपने आवेदन से प्रोफाइलिंग एजेंट का प्रबंधन भी कर सकते हैं।

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