Erlang 21 - 5. How to Interpret the Erlang Crash Dumps

5 एर्लैंग क्रैश डंप की व्याख्या कैसे करें




erlang

5 एर्लैंग क्रैश डंप की व्याख्या कैसे करें

यह खंड Erlang रनटाइम सिस्टम के असामान्य निकास पर उत्पन्न erl_crash.dump फ़ाइल का वर्णन करता है।

ध्यान दें

Erlang क्रैश डंप का Erlang / OTP R9C में एक प्रमुख पहलू था। इस खंड में जानकारी इसलिए पुराने डंप के लिए सीधे लागू नहीं है। हालाँकि, यदि आप पुराने डंप पर crashdump_viewer(3) उपयोग करते हैं, तो क्रैश डंप का इसी के समान प्रारूप में अनुवाद किया जाता है।

सिस्टम एमुलेटर की वर्तमान निर्देशिका में या पर्यावरण चर द्वारा बताई गई फ़ाइल में क्रैश डंप को लिखता है (जो भी वर्तमान ऑपरेटिंग सिस्टम पर इसका मतलब है) ERL_CRASH_DUMP । क्रैश डंप लिखे जाने के लिए, एक लिखने योग्य फ़ाइल सिस्टम को माउंट किया जाना चाहिए।

क्रैश डंप मुख्य रूप से दो कारणों में से एक के लिए लिखे गए हैं: या तो अंतर्निहित फ़ंक्शन erlang:halt/1 को स्पष्ट रूप से Erlang कोड चलाने से एक स्ट्रिंग तर्क के साथ कहा जाता है, या रनटाइम सिस्टम ने एक त्रुटि का पता लगाया है जिसे संभाला नहीं जा सकता है। सबसे सामान्य कारण है कि सिस्टम त्रुटि को संभाल नहीं सकता है, इसका कारण बाहरी सीमाएं हैं, जैसे कि मेमोरी से बाहर चलना। एक आंतरिक त्रुटि के कारण क्रैश डंप एमुलेटर में सीमा तक पहुंचने वाली प्रणाली के कारण ही हो सकता है (जैसे सिस्टम में परमाणुओं की संख्या, या कई एक साथ ईटीएस टेबल)। दुर्घटना से बचने के लिए आमतौर पर एमुलेटर या ऑपरेटिंग सिस्टम को फिर से जोड़ा जा सकता है, यही वजह है कि क्रैश डंप की सही तरीके से व्याख्या करना महत्वपूर्ण है।

ओएस सिग्नल का समर्थन करने वाले सिस्टम पर, रनटाइम सिस्टम को रोकना और SIGUSR1 सिग्नल भेजकर क्रैश डंप उत्पन्न करना भी संभव है।

एर्लैंग क्रैश डंप एक पठनीय पाठ फ़ाइल है, लेकिन इसे पढ़ना मुश्किल हो सकता है। Observer एप्लीकेशन में क्रैशडम्प व्यूअर टूल का उपयोग करना कार्य को सरल बनाता है। यह Erlang क्रैश डंप ब्राउज़ करने के लिए एक wx- विजेट-आधारित उपकरण है।

५.१ सामान्य जानकारी

क्रैश डंप का पहला भाग निम्नलिखित दिखाता है:

  • डंप के निर्माण का समय
  • एक नारा जो डंप का कारण बताता है
  • नोड का सिस्टम संस्करण जिससे डंप की उत्पत्ति होती है
  • एमुलेटर का संकलन समय मूल नोड को चलाता है
  • परमाणु तालिका में परमाणुओं की संख्या
  • रनटाइम सिस्टम थ्रेड जो क्रैश डंप का कारण बना

क्रैश डंप्स (नारा) के कारण

डंप का कारण फ़ाइल की शुरुआत में दिखाया गया है:

Slogan: <reason>

यदि सिस्टम BIF erlang:halt/1 से रुका हुआ है, तो नारा BIF को दिया गया स्ट्रिंग पैरामीटर है, अन्यथा यह एमुलेटर या (Erlang) कर्नेल द्वारा उत्पन्न विवरण है। आम तौर पर समस्या को समझने के लिए संदेश पर्याप्त है, लेकिन कुछ संदेश यहां वर्णित हैं। ध्यान दें कि क्रैश के लिए सुझाए गए कारण केवल सुझाव हैं । त्रुटियों के सटीक कारण स्थानीय अनुप्रयोगों और अंतर्निहित ऑपरेटिंग सिस्टम के आधार पर भिन्न हो सकते हैं।

<A>: मेमोरी का बाइट <n> आवंटित नहीं किया जा सकता (प्रकार "<T>")

सिस्टम स्मृति से बाहर चला गया है। <A> आवंटनकर्ता है जो मेमोरी आवंटित करने में विफल रहा, <N> बाइट्स की संख्या है जिसे <A> ने आवंटित करने की कोशिश की, और <T> मेमोरी ब्लॉक प्रकार है जो मेमोरी के लिए आवश्यक था। सबसे आम मामला यह है कि एक प्रक्रिया भारी मात्रा में डेटा संग्रहीत करती है। इस मामले में <T> सबसे अधिक बार heap , old_heap , heap_frag या binary erts_alloc(3) बारे में अधिक जानकारी के लिए, erts_alloc(3)

<A>: पुनः लोड नहीं किया जा सकता <n> मेमोरी बाइट्स (प्रकार "<T>")

जब सिस्टम स्मृति से बाहर चला जाता है, तो आबंटित के बजाय स्मृति को फिर से आबंटित किया गया था।

अनपेक्षित op कोड <N>

संकलित कोड में त्रुटि, beam फ़ाइल क्षतिग्रस्त, या संकलक में त्रुटि।

मॉड्यूल <नाम> अपरिभाषित | समारोह <नाम> अपरिभाषित | कोई फ़ंक्शन <नाम>: <नाम> / 1 | कोई फ़ंक्शन <नाम>: प्रारंभ / 2

कर्नेल / STDLIB अनुप्रयोग क्षतिग्रस्त हैं या प्रारंभ स्क्रिप्ट क्षतिग्रस्त है।

Driver_select ने बहुत बड़ी फ़ाइल डिस्क्रिप्टर N साथ कॉल की

सॉकेट के लिए फ़ाइल डिस्क्रिप्टर की संख्या 1024 (केवल यूनिक्स) से अधिक है। कुछ यूनिक्स फ्लेवर्स में फ़ाइल डिस्क्रिप्टर की सीमा 1024 से अधिक पर सेट की जा सकती है, लेकिन Erlang द्वारा केवल एक साथ 1024 सॉकेट / पाइप का उपयोग किया जा सकता है (यूनिक्स के select में सीमा के कारण)। खुली नियमित फ़ाइलों की संख्या इससे प्रभावित नहीं होती है।

SIGUSR1 प्राप्त किया

Erlang मशीन (केवल यूनिक्स) के लिए SIGUSR1 सिग्नल भेजना क्रैश डंप को मजबूर करता है। यह नारा दर्शाता है कि उस संकेत को प्राप्त करने के कारण एर्लांग मशीन दुर्घटनाग्रस्त हो गई।

कर्नेल पीड समाप्त (<कौन>) (<निकास कारण>)

कर्नेल पर्यवेक्षक ने एक विफलता का पता लगाया है, आमतौर पर कि application_controller बंद हो गई है ( Who = application_controller , Why = shutdown )। एप्लिकेशन नियंत्रक कई कारणों से बंद हो सकता है, सबसे सामान्य यह है कि वितरित एर्लांग नोड का नोड नाम पहले से ही उपयोग में है। एक पूर्ण पर्यवेक्षक वृक्ष "क्रैश" (यानी, शीर्ष पर्यवेक्षक बाहर निकल चुके हैं) उसी परिणाम के बारे में बताता है। यह संदेश Erlang कोड से आता है न कि वर्चुअल मशीन से। यह हमेशा किसी एप्लिकेशन में कुछ विफलता के कारण होता है, या तो ओटीपी या "उपयोगकर्ता-लिखित" एक के भीतर। आपके आवेदन के लिए त्रुटि लॉग को देखते हुए संभवतः यह पहला कदम है।

Do_boot में इनिट समाप्त करना ()

आदिम एर्लैंग बूट अनुक्रम को समाप्त कर दिया गया था, शायद इसलिए कि बूट स्क्रिप्ट में त्रुटियां हैं या जिन्हें पढ़ा नहीं जा सकता है। यह आमतौर पर एक कॉन्फ़िगरेशन त्रुटि है; सिस्टम को दोषपूर्ण- -boot पैरामीटर या गलत ओटीपी संस्करण से बूट स्क्रिप्ट के साथ शुरू किया जा सकता है।

कर्नेल पिड शुरू नहीं कर सका (<Who>) ()

कर्नेल की एक प्रक्रिया शुरू नहीं हो सकी। यह संभवतः दोषपूर्ण तर्कों के कारण है (जैसे-एक -config तर्क में त्रुटियाँ) या दोषपूर्ण विन्यास फाइल। जांचें कि सभी फाइलें अपने सही स्थान पर हैं और कॉन्फ़िगरेशन फाइलें (यदि कोई हो) क्षतिग्रस्त नहीं हैं। आमतौर पर संदेश को नियंत्रित करने वाले टर्मिनल और / या त्रुटि लॉग में लिखा जाता है जो बताता है कि क्या गलत है।

इनके अलावा अन्य त्रुटियां हो सकती हैं, जैसा कि erlang:halt/1 बीआईएफ किसी भी संदेश को उत्पन्न कर सकता है। यदि संदेश BIF द्वारा उत्पन्न नहीं होता है और ऊपर दी गई सूची में नहीं होता है, तो यह एमुलेटर में त्रुटि के कारण हो सकता है। हालांकि, असामान्य संदेश हो सकते हैं, जिनका उल्लेख यहां नहीं किया गया है, जो अभी भी एक एप्लिकेशन विफलता से जुड़े हैं। बहुत अधिक जानकारी उपलब्ध है, इसलिए क्रैश डंप का पूरी तरह से पढ़ना दुर्घटना का कारण बता सकता है। प्रक्रियाओं का आकार, प्रत्येक प्रक्रिया स्टैक पर ईटीएस टेबल की संख्या, और एरलंग डेटा समस्या को खोजने के लिए उपयोगी हो सकते हैं।

परमाणुओं की संख्या

दुर्घटना के समय प्रणाली में परमाणुओं की संख्या को परमाणुओं के रूप में दिखाया गया है : <संख्या> । कुछ दस हजारों परमाणु पूरी तरह से सामान्य हैं, लेकिन अधिक यह संकेत दे सकता है कि erlang:list_to_atom/1 का उपयोग गतिशील रूप से कई अलग-अलग परमाणुओं को उत्पन्न करने के लिए किया जाता है, जो कभी भी एक अच्छा विचार नहीं है।

5.2 समयबद्धक सूचना

टैग के तहत = अनुसूचक को रनटाइम सिस्टम में वर्तमान स्थिति और अनुसूचियों के आंकड़ों के बारे में जानकारी दिखाई जाती है। ऑपरेटिंग सिस्टम पर जो अन्य थ्रेड के निलंबन की अनुमति देते हैं, इस खंड के भीतर डेटा दर्शाता है कि जब कोई दुर्घटना होती है तो रनटाइम सिस्टम कैसा दिखता है।

निम्नलिखित क्षेत्र एक प्रक्रिया के लिए मौजूद हो सकते हैं:

= अनुसूचक: आईडी

शीर्षक। अनुसूचक पहचानकर्ता बताता है।

समयबद्धक नींद की जानकारी झंडे

खाली होने पर शेड्यूलर कुछ काम कर रहा था। यदि खाली नहीं है, तो शेड्यूलर या तो नींद की अवस्था में है, या निलंबित है। यह प्रविष्टि केवल SMP- सक्षम एमुलेटर में मौजूद है।

शेड्यूलर स्लीप इंफो ऑक्स वर्क

यदि खाली नहीं है, तो एक अनुसूचक आंतरिक सहायक कार्य किया जाना निर्धारित है।

वर्तमान पोर्ट

वर्तमान में शेड्यूलर द्वारा निष्पादित पोर्ट की पोर्ट पहचानकर्ता।

वर्तमान प्रक्रिया

वर्तमान में शेड्यूलर द्वारा निष्पादित प्रक्रिया की प्रक्रिया पहचानकर्ता। यदि ऐसी कोई प्रक्रिया है, तो यह प्रविष्टि राज्य , आंतरिक राज्य , प्रोग्राम काउंटर और उसी प्रक्रिया के सीपी द्वारा पीछा की जाती है। प्रविष्टियों को अनुभाग Process Information में वर्णित किया गया है।

ध्यान दें कि यह एक स्नैपशॉट है जो क्रैश डंप उत्पन्न होने पर प्रविष्टियों को वास्तव में क्या है। इसलिए वे = खरीद अनुभाग में पाई गई समान प्रक्रियाओं के लिए प्रविष्टियों की तुलना में सबसे अधिक भिन्न (और अधिक बताने वाले) हैं। यदि वर्तमान में कोई प्रक्रिया नहीं चल रही है, तो केवल वर्तमान प्रक्रिया प्रविष्टि दिखाई जाती है।

वर्तमान प्रक्रिया लिमिटेड स्टैक ट्रेस

यह प्रविष्टि केवल तभी दिखाई जाती है जब कोई वर्तमान प्रक्रिया हो। यह =proc_stack समान है, सिवाय इसके कि केवल फ़ंक्शन फ़्रेम दिखाए जाते हैं (यानी, स्टैक चर को छोड़ दिया जाता है)। साथ ही, स्टैक के केवल ऊपरी और निचले हिस्से को दिखाया गया है। यदि स्टैक छोटा है (<512 स्लॉट्स), तो पूरा स्टैक दिखाया गया है। अन्यथा प्रविष्टि लंघन ## स्लॉट दिखाया गया है, जहां ## को छोड़ दिया गया स्लॉट की संख्या से बदल दिया जाता है।

कतार चलाएं

इस अनुसूचक पर विभिन्न प्राथमिकताओं की कितनी प्रक्रियाएँ और पोर्ट निर्धारित हैं, इसके बारे में आँकड़े दिखाते हैं।

** दुर्घटनाग्रस्त **

यह प्रविष्टि आम तौर पर नहीं दिखाई जाती है। यह दर्शाता है कि किसी कारण से इस अनुसूचक के बारे में बाकी जानकारी प्राप्त करना विफल हो गया।

५.३ स्मृति सूचना

टैग के तहत = मेमोरी को सूचना के समान दिखाया जाता है जिसे एरलैंग erlang:memory() साथ एक जीवित नोड पर प्राप्त किया जा सकता है।

5.4 आंतरिक तालिका जानकारी

टैग के अंतर्गत = hash_table: <table_name> और = index_table: <table_name> को आंतरिक टेबल दिखाया गया है। ये ज्यादातर रनटाइम सिस्टम डेवलपर्स के लिए रुचि रखते हैं।

5.5 आवंटित क्षेत्र

टैग के तहत = आबंटित_रैस को तत्संबंधी सूचना दी जाती है जो erlang:system_info(allocated_areas) साथ एक जीवित नोड पर प्राप्त की जा सकती है erlang:system_info(allocated_areas)

5.6 आवंटन

टैग = आवंटनकर्ता के तहत : <A> आवंटनकर्ता के बारे में विभिन्न जानकारी दिखाई जाती है <A>। जानकारी erlang:system_info({allocator, <A>}) साथ एक जीवित नोड पर प्राप्त की जा सकती है के समान है erlang:system_info({allocator, <A>}) । अधिक जानकारी के लिए, erts_alloc(3) भी देखें।

5.7 प्रक्रिया की जानकारी

Erlang क्रैशडंप में सिस्टम में प्रत्येक जीवित Erlang प्रक्रिया की एक सूची होती है। निम्नलिखित क्षेत्र एक प्रक्रिया के लिए मौजूद हो सकते हैं:

= proc: <पीआईडी>

शीर्षक। प्रक्रिया पहचानकर्ता बताता है।

राज्य

प्रक्रिया की स्थिति। यह निम्नलिखित में से एक हो सकता है:

अनुसूचित
प्रक्रिया को चलाने के लिए निर्धारित किया गया था, लेकिन वर्तमान में नहीं चल रहा है ("रन कतार में")।
इंतज़ार कर रही
प्रक्रिया कुछ (प्रतीक्षा में) के लिए इंतजार कर रही थी।
चल रहा है
वर्तमान में यह प्रक्रिया चल रही थी। यदि बीआईएफ erlang:halt/1 कहा जाता था, तो इसे कॉल करने की प्रक्रिया थी।
बाहर निकल रहा है
बाहर निकलने के लिए प्रक्रिया चल रही थी।
Garbing
यह दुर्भाग्य है, क्रैश डंप लिखे जाने पर यह प्रक्रिया कचरा एकत्रित कर रही थी। इस प्रक्रिया के लिए बाकी जानकारी सीमित है।
बर्खास्त कर दिया
यह प्रक्रिया निलंबित है, या तो erlang:suspend_process/1 द्वारा erlang:suspend_process/1 या क्योंकि यह एक व्यस्त बंदरगाह पर लिखने की कोशिश करता है।
पंजीकृत नाम

प्रक्रिया का पंजीकृत नाम, यदि कोई हो।

के रूप में पैदा किया

प्रक्रिया का प्रवेश बिंदु, अर्थात, spawn या spawn_link कॉल में किस फ़ंक्शन को संदर्भित किया गया था जिसने प्रक्रिया शुरू की।

अंतिम में निर्धारित | वर्तमान कॉल

प्रक्रिया का वर्तमान कार्य। ये फ़ील्ड हमेशा मौजूद नहीं होते हैं।

द्वारा प्रायोजित

प्रक्रिया के जनक, spawn_link , वह प्रक्रिया जो spawn या spawn_link निष्पादित spawn_link

शुरू कर दिया है

तारीख और समय जब प्रक्रिया शुरू की गई थी।

संदेश कतार की लंबाई

प्रक्रिया की संदेश कतार में संदेशों की संख्या।

ढेर के टुकड़ों की संख्या

आवंटित ढेर के टुकड़ों की संख्या।

टुकड़ा टुकड़ा डेटा

खंडित हीप डेटा का आकार। यह डेटा है जो या तो प्रक्रिया को भेजे गए संदेशों द्वारा या एर्लांग बीआईएफ द्वारा बनाया गया है। यह राशि इतनी सारी चीजों पर निर्भर करती है कि यह क्षेत्र पूरी तरह से निर्बाध है।

लिंक सूची

इस एक से जुड़ी प्रक्रियाओं की प्रक्रिया आईडी। बंदरगाह भी हो सकते हैं। यदि प्रक्रिया निगरानी का उपयोग किया जाता है, तो यह क्षेत्र यह भी बताता है कि निगरानी किस दिशा में है। यही है, एक लिंक "से" एक प्रक्रिया आपको बताती है कि "वर्तमान" प्रक्रिया दूसरे की निगरानी कर रही थी, और "एक प्रक्रिया" से एक लिंक आपको बताता है कि दूसरी प्रक्रिया वर्तमान की निगरानी कर रही थी।

कटौती

प्रक्रिया द्वारा खपत में कटौती की संख्या।

ढेर + ढेर

स्टैक और हीप का आकार (वे मेमोरी सेगमेंट साझा करते हैं)।

OldHeap

"पुराने ढेर" का आकार। Erlang वर्चुअल मशीन दो पीढ़ियों के साथ जेनरल कचरा संग्रहण का उपयोग करती है। नए डेटा आइटम के लिए एक ढेर है और डेटा के लिए एक है जो दो कचरा संग्रह से बच गया है। यह धारणा (जो लगभग हमेशा सही होती है) यह है कि दो कचरा संग्रह से बचे हुए डेटा को "एकत्रित" किया जा सकता है, जो कि शायद ही कभी एकत्र किए गए कचरे के ढेर के बराबर होता है, क्योंकि वे लंबे समय तक जीवित रहेंगे। यह वर्चुअल मशीन में एक सामान्य तकनीक है। ढेर और ढेर का योग एक साथ प्रक्रिया की आवंटित स्मृति का गठन करते हैं।

हीप अप्रयुक्त, ओल्डहेप अप्रयुक्त

प्रत्येक ढेर पर अप्रयुक्त स्मृति की मात्रा। यह जानकारी आमतौर पर बेकार है।

याद

इस प्रक्रिया द्वारा उपयोग की जाने वाली कुल मेमोरी। इसमें कॉल स्टैक, हीप और आंतरिक संरचना शामिल हैं। erlang:process_info(Pid,memory) समान erlang:process_info(Pid,memory)

कार्यक्रम गणक

वर्तमान अनुदेश सूचक। यह केवल रनटाइम सिस्टम डेवलपर्स के लिए ब्याज है। फ़ंक्शन जिसमें प्रोग्राम काउंटर पॉइंट्स प्रक्रिया का वर्तमान कार्य है।

सी.पी.

निरंतरता सूचक, यानी वर्तमान कॉल के लिए वापसी पता। आमतौर पर रनटाइम सिस्टम डेवलपर्स के अलावा अन्य के लिए बेकार है। यह फ़ंक्शन के द्वारा पीछा किया जा सकता है जिसमें सीपी बिंदु है, जो वर्तमान फ़ंक्शन को कॉल करने वाला फ़ंक्शन है।

arity

लाइव तर्क रजिस्टर की संख्या। यदि कोई जीवित है तो तर्क का पालन होता है। इनमें फ़ंक्शन के तर्क हो सकते हैं यदि वे अभी तक स्टैक में नहीं ले गए हैं।

आंतरिक स्थिति

इस प्रक्रिया की स्थिति का एक अधिक विस्तृत आंतरिक प्रतिनिधित्व।

अनुभाग =proc_stack भी देखें।

5.8 पोर्ट सूचना

यह खंड खुले बंदरगाहों, उनके मालिकों, किसी भी लिंक की गई प्रक्रियाओं और उनके चालक या बाहरी प्रक्रिया के नाम को सूचीबद्ध करता है।

5.9 ईटीएस टेबल्स

इस खंड में सिस्टम के सभी ईटीएस टेबल के बारे में जानकारी है। प्रत्येक तालिका के लिए निम्नलिखित फ़ील्ड रुचि के हैं:

= ETS: <मालिक>

शीर्षक। तालिका के स्वामी (एक प्रक्रिया पहचानकर्ता) को बताता है।

तालिका

तालिका के लिए पहचानकर्ता। यदि तालिका एक named_table , तो यह नाम है।

नाम

टेबल का नाम, भले ही यह एक named_table या नहीं।

हैश टेबल, बकेट्स

यदि तालिका एक हैश तालिका है, अर्थात, यदि यह एक ordered_set नहीं है।

हैश टेबल, चेन लेंथ

यदि तालिका एक हैश तालिका है। तालिका के बारे में आंकड़े शामिल हैं, जैसे कि अधिकतम, न्यूनतम और औसत श्रृंखला लंबाई। औसत से अधिक से अधिक बड़ा होना, और अपेक्षित मानक विचलन की तुलना में बहुत अधिक मानक विचलन एक संकेत है कि शर्तों के हैशिंग किसी कारण से खराब व्यवहार करते हैं।

आदेशित सेट (एवीएल पेड़), तत्व

यदि टेबल एक ordered_set । (तत्वों की संख्या तालिका में वस्तुओं की संख्या के समान है।)

स्थिर

यदि तालिका ets:safe_fixtable/2 का उपयोग करके तय की गई है ets:safe_fixtable/2 या कुछ आंतरिक तंत्र।

वस्तुओं

तालिका में वस्तुओं की संख्या।

शब्द

तालिका में डेटा को आवंटित शब्दों की संख्या (आमतौर पर 4 बाइट्स / शब्द)।

प्रकार

तालिका प्रकार, वह है, set , bag , dublicate_bag , या ordered_set

दबा हुआ

यदि तालिका संकुचित थी।

सुरक्षा

मेज की सुरक्षा।

कंसीडर लिखें

यदि टेबल के लिए write_concurrency सक्षम थी।

पढ़ें

अगर read_concurrency टेबल के लिए सक्षम था।

5.10 टाइमर

इस खंड में BIFs erlang:start_timer/3 और erlang:send_after/3 साथ शुरू की गई सभी टाइमर के बारे में जानकारी है। प्रत्येक टाइमर के लिए निम्न फ़ील्ड मौजूद हैं:

= टाइमर: <मालिक>

शीर्षक। टाइमर के मालिक (एक प्रक्रिया पहचानकर्ता), अर्थात्, टाइमर समाप्त होने पर संदेश प्राप्त करने की प्रक्रिया।

संदेश

भेजे जाने का संदेश।

शेष समय

संदेश भेजे जाने तक मिलीसेकंड की संख्या छोड़ दी गई।

5.11 वितरण जानकारी

यदि एरलांग नोड जीवित था, अर्थात, अन्य नोड्स के साथ संचार करने के लिए सेट किया गया था, तो यह खंड उन कनेक्शनों को सूचीबद्ध करता है जो सक्रिय थे। निम्नलिखित क्षेत्र मौजूद हो सकते हैं:

= नोड: <node_name>

नोड नाम।

no_distribution

यदि नोड वितरित नहीं किया गया था।

= visible_node: <चैनल>

एक दृश्यमान नोड के लिए शीर्षक, जो कि दुर्घटनाग्रस्त नोड के कनेक्शन के साथ एक जीवित नोड है। नोड के लिए चैनल नंबर बताता है।

= hidden_node: <चैनल>

एक छिपे हुए नोड के लिए शीर्षक। एक छिपा हुआ नोड दृश्यमान नोड के समान है, सिवाय इसके कि इसे "-hidden" ध्वज के साथ शुरू किया गया है। नोड के लिए चैनल नंबर बताता है।

= not_connected: <चैनल>

एक नोड के लिए शीर्षक जो पहले दुर्घटनाग्रस्त नोड से जुड़ा था। क्रैश के समय कनेक्टेड नोड में संदर्भ (यानी, प्रक्रिया या पोर्ट आइडेंटिफ़ायर) मौजूद नहीं हैं। नोड के लिए चैनल नंबर बताता है।

नाम

रिमोट नोड का नाम।

नियंत्रक

रिमोट नोड के साथ संचार को नियंत्रित करने वाला पोर्ट।

सृष्टि

एक पूर्णांक (1-3) जो नोड नाम के साथ मिलकर नोड के एक विशिष्ट उदाहरण की पहचान करता है।

रिमोट मॉनिटरिंग: <local_proc> <Remote_proc>

दुर्घटना के समय स्थानीय प्रक्रिया दूरस्थ प्रक्रिया की निगरानी कर रही थी।

दूरस्थ रूप से मॉनिटर किया गया: <local_proc> <Remote_proc>

रिमोट प्रक्रिया दुर्घटना के समय स्थानीय प्रक्रिया की निगरानी कर रही थी।

दूरस्थ लिंक: <local_proc> <Remote_proc>

दुर्घटना के समय स्थानीय प्रक्रिया और दूरस्थ प्रक्रिया के बीच एक लिंक मौजूद था।

5.12 लोड मॉड्यूल जानकारी

इस खंड में सभी लोड किए गए मॉड्यूल के बारे में जानकारी है।

सबसे पहले, लोड किए गए कोड द्वारा मेमोरी का उपयोग संक्षेप में किया गया है:

वर्तमान कोड

कोड जो मॉड्यूल का वर्तमान नवीनतम संस्करण है।

पुराना कोड

कोड जहां सिस्टम में एक नया संस्करण मौजूद है, लेकिन पुराने संस्करण को अभी तक शुद्ध नहीं किया गया है।

मेमोरी का उपयोग बाइट्स में होता है।

फिर, सभी लोड किए गए मॉड्यूल सूचीबद्ध हैं। निम्नलिखित फ़ील्ड मौजूद हैं:

= आधुनिक: <MODULE_NAME>

शीर्षक। मॉड्यूल नाम बताता है।

मौजूदा आकार

बाइट्स में लोड कोड के लिए मेमोरी का उपयोग।

पुराना आकार

पुराने कोड के लिए मेमोरी का उपयोग, यदि कोई हो।

वर्तमान विशेषताएँ

वर्तमान कोड के लिए मॉड्यूल विशेषताएँ। क्रैशडम्प दर्शक उपकरण द्वारा देखने पर यह फ़ील्ड डीकोड हो जाती है।

पुरानी विशेषताएँ

पुराने कोड के लिए मॉड्यूल विशेषताएँ, यदि कोई हो। क्रैशडम्प दर्शक उपकरण द्वारा देखने पर यह फ़ील्ड डीकोड हो जाती है।

वर्तमान संकलन जानकारी

वर्तमान कोड के लिए संकलन जानकारी (विकल्प)। क्रैशडम्प दर्शक उपकरण द्वारा देखने पर यह फ़ील्ड डीकोड हो जाती है।

पुरानी संकलन की जानकारी

पुराने कोड के लिए संकलन सूचना (विकल्प), यदि कोई हो। क्रैशडम्प दर्शक उपकरण द्वारा देखने पर यह फ़ील्ड डीकोड हो जाती है।

5.13 मजेदार जानकारी

यह खंड सभी मौजों को सूचीबद्ध करता है। प्रत्येक मज़े के लिए निम्नलिखित क्षेत्र मौजूद हैं:

= मज़ा

शीर्षक।

मॉड्यूल

मॉड्यूल का नाम जहां मज़ा परिभाषित किया गया था।

यूनीक, इंडेक्स

पहचानकर्ता।

पता

मस्ती के कोड का पता।

Native_address

HiPE सक्षम होने पर मजेदार कोड का पता।

Refc

मस्ती के संदर्भों की संख्या।

5.14 प्रक्रिया डेटा

प्रत्येक प्रक्रिया के लिए कम से कम एक = proc_stack और एक = proc_heap टैग होता है, जिसके बाद प्रक्रिया के ढेर और ढेर के लिए कच्ची मेमोरी जानकारी होती है।

प्रत्येक प्रक्रिया के लिए भी एक = proc_messages टैग है यदि प्रक्रिया संदेश कतार गैर-रिक्त है, और एक = proc_dEDIA टैग यदि प्रक्रिया शब्दकोश ( put/2 और get/1 चीज़) गैर-रिक्त है।

कच्चे मेमोरी जानकारी को क्रैशडम्प व्यूअर टूल द्वारा डिकोड किया जा सकता है। फिर आप स्टैक डंप, संदेश कतार (यदि कोई हो), और शब्दकोश (यदि कोई हो) देख सकते हैं।

स्टैक डंप Erlang प्रक्रिया स्टैक का एक डंप है। अधिकांश लाइव डेटा (अर्थात, वर्तमान में उपयोग किए जा रहे चर) स्टैक पर रखे गए हैं; इस प्रकार यह दिलचस्प हो सकता है। एक को "अनुमान" करना है कि क्या है, लेकिन जैसा कि जानकारी प्रतीकात्मक है, इस जानकारी को पूरी तरह से पढ़ना उपयोगी हो सकता है। एक उदाहरण के रूप में, हम निम्नलिखित उदाहरण में Erlang आदिम लोडर के राज्य चर (5) और (6) पा सकते हैं:

(1)  3cac44   Return addr 0x13BF58 (<terminate process normally>)
(2)  y(0)     ["/view/siri_r10_dev/clearcase/otp/erts/lib/kernel/ebin",
(3)            "/view/siri_r10_dev/clearcase/otp/erts/lib/stdlib/ebin"]
(4)  y(1)     <0.1.0>
(5)  y(2)     {state,[],none,#Fun<erl_prim_loader.6.7085890>,undefined,#Fun<erl_prim_loader.7.9000327>,
(6)            #Fun<erl_prim_loader.8.116480692>,#Port<0.2>,infinity,#Fun<erl_prim_loader.9.10708760>}
(7)  y(3)     infinity    

किसी प्रक्रिया के लिए डेटा की व्याख्या करते समय, यह जानना उपयोगी होता है कि अनाम फ़ंक्शन ऑब्जेक्ट्स (funs) निम्नलिखित दिए गए हैं:

  • फ़ंक्शन के नाम से निर्मित एक नाम जिसमें वे बनाए गए हैं
  • एक संख्या (0 से शुरू) उस फ़ंक्शन के भीतर उस मज़ा की संख्या को दर्शाती है

5.15 परमाणु

यह खंड प्रणाली में सभी परमाणुओं को प्रस्तुत करता है। यह केवल ब्याज की है अगर किसी को संदेह है कि परमाणुओं की गतिशील पीढ़ी एक समस्या हो सकती है, अन्यथा इस खंड को अनदेखा किया जा सकता है।

ध्यान दें कि अंतिम बनाया गया परमाणु पहले दिखाया गया है।

५.१६ त्याग

क्रैश डंप का प्रारूप OTP रिलीज़ के बीच विकसित होता है। यहां वर्णित कुछ जानकारी आपके संस्करण पर लागू नहीं हो सकती है। इस तरह एक विवरण कभी पूरा नहीं होगा; इसका अर्थ सामान्य रूप से क्रैश डंप के स्पष्टीकरण के रूप में है और आवेदन त्रुटियों को खोजने की कोशिश में मदद के रूप में है, न कि पूर्ण विनिर्देश के रूप में।