मैं सोचता था कि यह नहीं है, लेकिन कल मुझे यह करना था। यह एक ऐसा अनुप्रयोग है जो अतुल्यकालिक नौकरियों को संसाधित करने के लिए अक्का (जेवीएम के लिए एक अभिनेता प्रणाली कार्यान्वयन) का उपयोग करता है । अभिनेताओं में से एक कुछ पीडीएफ हेरफेर करता है, और क्योंकि पुस्तकालय छोटी गाड़ी है, यह StackOverflowError
हर अब और फिर मर जाता है ।
दूसरा पहलू यह है कि अगर कोई भी JVM घातक त्रुटि (जैसे StackOverflowError) पकड़ी जाती है तो अक्का को उसके पूरे अभिनेता सिस्टम को बंद करने के लिए कॉन्फ़िगर किया गया है।
तीसरा पहलू यह है कि यह अभिनेता प्रणाली एक वेब ऐप (डब्ल्यूटीएफ-ईश, विरासत, कारणों के लिए) के अंदर एम्बेडेड है, इसलिए जब अभिनेता प्रणाली बंद हो जाती है, तो वेब ऐप नहीं है। शुद्ध प्रभाव यह है कि StackOverflowError
हमारे नौकरी प्रसंस्करण पर आवेदन सिर्फ एक खाली वेब ऐप बन जाता है।
एक त्वरित सुधार के रूप में मुझे StackOverflowError
फेंका जा रहा था, ताकि अभिनेता प्रणाली के थ्रेड पूल को फाड़ा न जाए। यह मुझे सोचने के लिए प्रेरित करता है कि शायद कभी-कभी ऐसी त्रुटियों को पकड़ने के लिए ठीक है जैसे विशेष रूप से इस तरह के संदर्भों में? जब थ्रेड पूल में मनमाने कार्य होते हैं? इसके विपरीत, OutOfMemoryError
मैं कल्पना नहीं कर सकता कि कैसे एक StackOverflowError
असंगत स्थिति में आवेदन छोड़ सकता है। इस तरह की त्रुटि के बाद स्टैक साफ हो जाता है, इसलिए गणना सामान्य रूप से चल सकती है। लेकिन शायद मुझे कुछ महत्वपूर्ण याद आ रहा है।
यह भी ध्यान दें कि मैं पहली बार में त्रुटि को ठीक करने के लिए हूं इस तरह की स्थिति उत्पन्न हो सकती है।
बेहतर होगा कि जेवीएम प्रक्रिया को फिर से शुरू करने के बजाय StackOverflowError
, उस नौकरी को असफल मानकर अपने व्यवसाय के साथ जारी रखा जाए?
क्या SOEs को कभी नहीं पकड़ने का कोई सम्मोहक कारण है? "सर्वोत्तम प्रथाओं" को छोड़कर, जो एक अस्पष्ट शब्द है जो मुझे कुछ भी नहीं बताता है।
StackOverflowException
- ढेर अंतरिक्ष तो कोई लाभ के लिए एक नया धागा की स्मृति लागत में वृद्धि होगी बढ़ रही रों आमतौर पर विधि कॉल की एक गैर समाप्त श्रृंखला की वजह से कर रहे हैं।
:-)