java - जूनियर परीक्षणों से "कांटेक्टेड जावा वीएम असामान्य रूप से बाहर निकल गया"




ant junit hudson (14)

मेरे पास एक जावा जूनिट टेस्ट है जो एक विकास मशीन पर अकेले चलने पर गुजरता है। हमारे पास एक हडसन नौकरी भी है जो सभी परीक्षणों को चलाता है, चींटी के माध्यम से, जावा 1.5 के साथ मैक ओएस एक्स 10.4 नोड पर। हाल ही में जब तक हडसन के निर्माण में परीक्षण गुजर रहा था, लेकिन अब (कोई संबंधित कोड परिवर्तन के साथ) एक परीक्षण निम्न त्रुटि के साथ हर बार विफल होता है:

त्रुटि संदेश

जावा VM असामान्य रूप से बाहर निकल गया। कृपया ध्यान दें कि जब तक वीएम बाहर नहीं निकलता है रिपोर्ट में समय को प्रतिबिंबित नहीं करता है।

स्टैक ट्रेस

junit.framework.AssertionFailedError: Forked Java VM असामान्य रूप से बाहर निकल गया। कृपया ध्यान दें कि जब तक वीएम बाहर नहीं निकलता है रिपोर्ट में समय को प्रतिबिंबित नहीं करता है।

googling से पता चलता है कि कई अन्य लोग एक ही समस्या में भाग गए हैं, लेकिन मुझे कोई जवाब नहीं मिला।


Answers

मैंने नेटबीन्स के एक नए संस्करण को बाहरी हार्ड डिस्क पर पुनः स्थापित करने, उसी समय जुनिट को अपग्रेड करने और अपने कार्यक्षेत्र का उपयोग करने के बाद समस्या का सामना किया।

मेरे लिए उसी समस्या का हल सरल था:

प्रोजेक्ट properties => Libraries => Compile Tests और Run Tests में ज्युनिट-लाइब्रेरी जोड़ें।

तो, मेरे मामले में, यह सिर्फ एक लापता पुस्तकालय या JUnit संस्करण संघर्ष था।


हमारे लिए, यह वास्तव में था कि हम दुर्घटना (ग्रहण के एक नए संस्करण का उपयोग करते हैं) ने अपने पुराने चींटी संस्करण के बजाय चींटी 1.7.x का उपयोग करना शुरू कर दिया था जो हमारे वेबलॉजिक 8.1 / JDK 1.4.x पर्यावरण के साथ संगत था। हमने इसे ग्रहण में चींटी होम को बदलकर तय किया-> विंडोज-> प्राथमिकताएं-> चींटी-> चींटी के पुराने संस्करण के लिए रनटाइम।

सादर क्लास


मेरे मामले में यह एक स्थिर इनिशियलाइज़र / मेथड / ब्लॉक एक वर्ग के अंदर एक अनकहा अपवाद है।

विशेष रूप से मेरे पास एक वर्ग था जिसे किसी अन्य कक्षा में एक स्थिर विधि कहा जाता था और यह एक नंबरफ़ॉर्मैट अपवाद को ट्रिगर कर रहा था।

BTW build.xml में कार्य करने के लिए "showoutput = true" जोड़कर समस्या निवारण में मदद नहीं की। चूंकि स्टैटिक ब्लॉक चलने वाली पहली चीजों में से एक है, इससे पहले कि कुछ भी आउटपुट कर सकता है, जेवीएम उड़ रहा था।


मैंने उसी मुद्दे का सामना किया। समस्या बाइट कोड पीढ़ी के साथ थी जो कि कॉन्फिग क्लास को मॉकिंग करने के साथ थी; हमने आयात को बदल दिया

import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

और यह काम किया।


मैं कुछ समय पहले एक ही बात थी। समस्या यह है कि System.exit () को कहीं न कहीं कहा जा रहा है। हालांकि यह पता लगाना मुश्किल हो सकता है, क्योंकि कॉल आपके कोड या आपके द्वारा उपयोग किए जाने वाले पुस्तकालयों में से किसी एक से आ सकती है।


मुझे इसी तरह के मुद्दे का सामना करना पड़ा। मैंने चींटी कार्य के रूप में जूनिट परीक्षण चलाए। मैंने शोउटपुट = "हाँ" चींटी की संपत्ति को जोड़ा और चींटी के काम को चलाया। इसके बाद अपवाद स्टैक ट्रेस दिखाई दिया, जिसके कारण कांटा jvm बाहर निकल गया।


मुझे यह समस्या थी और यह पता चला कि प्रक्रिया वास्तव में System.exit () कह रही थी। हालांकि चींटी में एक बग भी था जहां यह कभी-कभी दिखाई दे रहा था। मुझे लगता है कि चींटी 1.7.1 बग को ठीक कर दिया है। तो सुनिश्चित करें कि आप उस संस्करण को चला रहे हैं।


मेरे क्लासपाथ में कई जूनियर जार हैं। एक चींटी का है और दूसरा WAS का है। जैसा कि मैंने हटा दिया कि त्रुटि चली गई ... चींटी संस्करण जो मैं 1.8 का उपयोग कर रहा हूं


क्या वीएम दुर्घटनाग्रस्त हो रहा है? क्या आप डंप फ़ाइल (जिसे hs_err_pid*.log कहा जाता है) पा सकते हैं? अगर ऐसा है, तो डंप फ़ाइल आपको सुराग देगी कि यह दुर्घटनाग्रस्त क्यों है।


मैंने TestNG लाइब्रेरी को टेस्ट लाइब्रेरी में जोड़ा और इसने समस्या को ठीक कर दिया।


मेरा मानना ​​है कि मैंने इस त्रुटि को एक बार देखा था जब मैंने अपने वर्गपथ पर कई संस्करणों के साथ समाप्त किया। हो सकता है इसे देखना महंगा न पड़े।


मैंने निम्न परिवेश चर सेट करके अपनी समस्या हल की:

चर: _JAVA_OPTIONS मान: -Xms128m -Xmx512m


मेरे लिए, यह forked VM में एक "java.lang.OutOfMemoryError" था (कांटा = "हाँ" के साथ कार्य) जिसने इस संदेश को मुख्य VM में प्रदर्शित किया।

OutOfMemory चींटी लॉग में दिखाई दे रही थी (ठीक है, तब से दिखाई दे रही है जब यह अभी भी मौजूद है)।

मैं चींटी 1.7.1 का उपयोग करता हूं, इसलिए चींटी के उन्नयन के साथ कोई उम्मीद नहीं है।

Eclipse.ini (-Xms40m -Xmx512m -XX: MaxPermSize = 256M) की तुलना में "रन> एक्सटर्नल टूल्स> एक्सटर्नल टूल्स> जेआरई" में एक ही वीएम पैरामीटर डालने के बाद समस्या हल हो जाती है।

मैं कांटा रखने के लिए "नहीं" सुनिश्चित करने के लिए चींटी मापदंडों का उपयोग करें।






java ant junit hudson