2012-01-02 28 views
15

यदि मैं नोड.जेएस प्रक्रिया का कोड डंप बनाने के लिए गकोर का उपयोग करता हूं, तो इसका विश्लेषण करने के लिए सबसे अच्छे उपकरण क्या हैं?Node.js से कोर डंप का विश्लेषण करने के लिए उपकरण

से प्रेरित होकर: Tool for analyzing java core dump

मेरी विशिष्ट मामले में, मुझे कुछ मेमोरी लीक की जांच में रुचि हूँ, इसलिए मैं वास्तव में कुछ ढेर विश्लेषण प्राप्त करने के लिए उत्सुक हूँ। सामान्य उपकरण और यहां तक ​​कि उपकरण पैकेज और तकनीकों का भी स्वागत है। मुझे नोड.जेएस बहुत दिलचस्प होने के लिए मिल रहा है, लेकिन रनटाइम विश्लेषण उपकरण अभी तक नहीं हैं।

उत्तर

16

क्रैश की जांच के लिए, मुझे node-segfault-handler अमूल्य होने के लिए मिला है। यह एक मॉड्यूल है जिसे मैंने सिग्नल के साथ हार्ड-क्रैश होने की स्थिति में देशी-कोड स्टैक ट्रेस प्राप्त करने के लिए पकाया है - उदाहरण के लिए एनआईएलएल का डीईएफई एसआईजीएसईजीवी

मेमोरी/आवंटन मुद्दों की जांच के लिए, यहां कुछ डेटा है I इस प्रकार अब तक एकत्रित किया गया है:

1) Blog post by Dave Patheco - लेखक जेएस स्टैक और ऐसे प्राप्त करने के लिए एमडीबी को प्लगइन का उपयोग करने के बारे में बात करता है। अफसोस की बात है, जहां तक ​​मैं कह सकता हूं, उस प्लगइन का स्रोत कभी जारी नहीं किया गया था (न ही कोई बाइनरी रूप)।

2) Postmortem Debugging in Dynamic Environments - एसीएम क्यू लेख भी डेव पाथेको (ब्लॉग पोस्ट से जुड़ा हुआ) द्वारा लिखा गया है। हालांकि यह ग्रेट पृष्ठभूमि पढ़ने के लिए बनाता है, इस लेख में इसमें कई ठोस उपकरण और तकनीक नहीं हैं।

3) node-panic - एक जोर-विफलता प्रकार क्रैश की स्थिति में डंपिंग स्थिति के लिए एक शुद्ध-जेएस उपकरण। मूल कोड दोषों (एसआईजीएसईजीवी, आदि) से उत्पन्न होने वाली दुर्घटनाओं को डीबग करने में कुछ भी नहीं है

4) Joyent: Debugging Production Systems - ब्रायन कैंटिल द्वारा उन टूल और तकनीकों पर बात करें जो उन्होंने सिफारिश की थी (थक्स क्रिकी)।

+1

अभी देखे गए इस (http://www.infoq.com/presentations/Debugging-Production-Systems):

स्मृति विश्लेषण यहाँ llnode के प्रयोग पर एक पूरा लेख नहीं है। मुझे लगता है कि आपको खुशी से एक स्मार्टस चलाना होगा ताकि आप कोर फ़ाइल पर एमडीबी का उपयोग कर सकें, लेकिन मुझे सच में यकीन नहीं है। – crickeys

+0

संदर्भों के लिए धन्यवाद। एमडीबी मॉड्यूल के लिए स्रोत कोड और बाइनरी दोनों एक साल से अधिक उपलब्ध हैं। वे SmartOS (http://smartos.org/) में निर्मित हैं, जो जॉयंट पब्लिक क्लाउड पर अंतर्निहित हैं, और स्रोत github पर है (https://github.com/joyent/illumos-joyent/blob/master /usr/src/cmd/mdb/common/modules/v8/mdb_v8.c)। –

3

2017 अपडेट: अब आप @ एच-हेलीयर के समाधान (एलएनओडी, एमडीबी के बजाय एलएलडीबी के आधार पर) का उपयोग कर सकते हैं। https://stackoverflow.com/a/40045103/3221630

mdb + mdb_v8 जाने का रास्ता है।

एमडीबी का उपयोग करने के लिए, आपको एक समर्थित ओएस की आवश्यकता होगी।

अब, संभव है कि आप लिनक्स पर चल रहे हों। यह आपकी स्थिति है, तो:

भाग 1. अपने मूल डंप

आप कई मायनों में अपने कोर डंप प्राप्त कर सकते हैं मिलता है। चल रहे एक प्रक्रिया आप यह कर सकते हैं से अपने मूल डंप पाने के लिए:

pgrep -lf node # get pids 
gdb -p your_pid 

# once in gdb.. 
gcore # this will output your core dump 
detach # this will allow the process to continue to run. 

भाग 2 उपयोग mdb

इसकी भी संभावना है आप सोलारिस, ओपनसोलारिस, IllumOS या SmartOS के बारे में पता है। सबसे अधिक संभावना यह मामला नहीं है। यदि आप SmartOS और mdb_v8 को सेट करने का समय बर्दाश्त कर सकते हैं, तो ठीक है।

यदि नहीं, वर्चुअलबॉक्स स्थापित करें, और उसके बाद autopsy। यह स्मार्टओएस को स्थापित करने के साथ-साथ आपकी कोर डंप फ़ाइलों को वीएम में अपलोड करने की परंपरा को संभालता है।

एक बार जब आप कर लेंगे, और जब आप अपने एमडीबी सत्र में हों, तो आप इस presentation से कुछ चरणों का पालन कर सकते हैं।

8

लिनक्स और मैक पर आप lldb डीबगर के लिए एक प्लगइन का उपयोग कर सकते हैं। परियोजना GitHub पर NodeJS संगठन के तहत उपलब्ध है:

https://github.com/nodejs/llnode

आप GitHub के माध्यम से स्रोत से स्थापित करने या मैक पर काढ़ा उपयोग कर सकते हैं। GitHub पर रीडमी आप इसे स्थापित मिल मदद करनी चाहिए और यहाँ एक परिचयात्मक ब्लॉग लेख है:

https://developer.ibm.com/node/2016/08/15/exploring-node-js-core-dumps-using-the-llnode-plugin-for-lldb/

मूल प्रश्न स्मृति विश्लेषण के बारे में था और v8 findjsobjects और v8 findjsinstances आदेशों वस्तु की एक बुनियादी हिस्टोग्राम उत्पन्न करके वहाँ में मदद मिलेगी गणना करता है और आपको प्रत्येक प्रकार के उदाहरण सूचीबद्ध करने की इजाजत देता है। http://www.brendangregg.com/blog/2016-07-13/llnode-nodejs-memory-leak-analysis.html

+0

यह बहुत अच्छा है कि अब यह ldb पर समर्थित है, एमडीबी का उपयोग किए बिना। – arboreal84