2010-05-12 17 views
19

मैं मौजूदा एरलांग प्रोग्राम की दक्षता को आगे बढ़ाने के लिए चाहता हूं। सबसे पहले मैं बाधाओं की पहचान करना चाहता हूं और फिर निर्णय लेना चाहता हूं कि आगे कहां अनुकूलित करना है।मेमोरी उपयोग के मामले में एक एरलांग प्रोग्राम कैसे प्रोफाइल करें?

मैंने fprof का प्रयास किया है, लेकिन यह केवल कुल और औसत रनटाइम पर जानकारी देता है। मैं सबसे अधिक fprof के आउटपुट के समान लॉग देखना चाहता हूं, लेकिन कार्यों और प्रक्रियाओं के संबंध में औसत और कुल स्मृति उपयोग के संदर्भ में।


शुरुआत यह एक एकल मॉड्यूल, कि प्रक्रियाओं अंडे नहीं है प्रोफ़ाइल के लिए काफ़ी है के लिए, केवल यह कार्यों के नाम से जाना जाएगा। इससे पहले से ही मदद मिलेगी, क्योंकि मैं प्रोग्राम को परीक्षण के लिए अलग मॉड्यूल में अलग कर सकता हूं।


विशिष्ट संदिग्ध बिंदु हैं, जहां बड़ी सूचियां संभाली जा रही हैं।

यहां ++ का उपयोग lists:reverse([Head|Tail]) द्वारा सिंटैक्स की तरह हल किया गया है।

मैं कुछ सौ तत्वों वाले मामलों के लिए सूचियों के बजाय ईटीएस तालिकाओं का उपयोग करने पर भी विचार कर रहा हूं।

अग्रिम धन्यवाद!

http://www.erlang.org/doc/efficiency_guide/profiling.html

+1

+1। प्रोफाइलिंग का समर्थन करने के लिए :) –

+0

मुझे संदेह है कि सूचियों पर इट्स टेबल का उपयोग अंतरिक्ष के संदर्भ में एक लाभ होगा, इससे कोई फर्क नहीं पड़ता कि सूची/इट्स टेबल कितनी बड़ी है (एक सूची में प्रति तत्व एक पॉइंटर का ओवरहेड होता है) - आमतौर पर टेबल टेबल केवल आपको समय में लाभ प्रदान करते हैं। – Amadiro

उत्तर

20

मेरे स्वयं के लिए कुछ विज्ञापन कर:

+0

+1 यह बहुत ही आशाजनक लग रहा है। मैं इसकी जांच करुँगा। धन्यवाद! – cdlf

4

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

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

एरलांग हिस्सा काफी गैर-घुसपैठिया है, एक साधारण gen_server जिसे आप कहीं से भी शुरू कर सकते हैं, आप इसे अपने पर्यवेक्षण वृक्ष के नीचे रख सकते हैं। आप मतदान आवृत्ति इत्यादि को कॉन्फ़िगर कर सकते हैं, और यह एक साधारण जेसन प्रारूप में फ़ाइल को आंकड़े लिख देगा।

पर्ल स्क्रिप्ट उसके बाद चलता है, और चार्ट को आकर्षित करने के लिए लॉग को जोड़ता है। बेस-क्लास हैं, और यदि आप थोड़ा पेर्ल जानते हैं, तो आप लॉग इन करने के लिए आसानी से कक्षा लिख ​​सकते हैं और इच्छित कस्टम पैरामीटर चार्ट कर सकते हैं। (Erlang नोड कि परमाणुओं लीक) https://github.com/Amadiro/erlang-statistics

नमूना चार्ट:

स्क्रिप्ट से प्राप्त किया जा सकता Sample Chart http://monoc.mo.funpic.de/ram-usage-vs-time.png

आशा यह आप :)

+1

उत्तर के लिए धन्यवाद, लेकिन एरलांग दक्षता मार्गदर्शिका में उल्लिखित टूल के साथ मेरी समस्या यह है कि वे सभी रनटाइम पर ध्यान केंद्रित करते हैं और मुझे स्मृति उपयोग से संबंधित जानकारी की आवश्यकता होती है। – cdlf

3

@brainiac मदद करता है, मैं नए यूआरएल पोस्टिंग कर रहा हूँ github पर erlang-figures repo के लिए: https://github.com/Amadiro/erlang-statistics (इसे खोज द्वारा मिला ;-))।

+0

पोस्ट करने के लिए धन्यवाद, मैंने कुछ समय पहले जिथब पर अपना डिस्प्ले नाम बदल दिया, और ध्यान नहीं दिया कि यह सभी पुराने भंडार URL को अमान्य कर दिया गया है। ऊप्स! किसी भी मामले में, यूआरएल https://github.com/Amadiro/erlang-statistics आधिकारिक संस्करण है। – Amadiro

3

अधिक उत्पादन-तैयार समाधान के रूप में यदि आप वास्तव में कुल मेमोरी खपत ग्राफ के किसी प्रकार की आवश्यकता है तो मैं संग्रहित एरलांग क्लाइंट https://github.com/athoune/erlang-collectd की अनुशंसा कर सकता हूं।

लेकिन अधिक बारीक स्मृति जानकारी के लिए आप स्मृति और रनटाइम जानकारी के साथ सभी प्रक्रियाओं की सूची के लिए एक विशिष्ट पिड और खोल कमांड i() के लिए स्मृति जानकारी प्राप्त करने के लिए process_info(Pid, [memory]) का उपयोग कर सकते हैं। ईटॉप के रूप में भी ऐसा उपयोग है।

लेकिन एफप्रोफ जैसे कोई प्रोफाइलर नहीं है, लेकिन स्मृति उपयोग के लिए।

विवरण के लिए http://www.erlang.org/faq/how_do_i.html#id52731 का संदर्भ लें।

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