यहाँ कैसे आप के लिए eprof संभावना सबसे आसान समाधान का उपयोग करने के, है:
सबसे पहले आप, यह शुरू करने की आवश्यकता वहाँ बाहर सबसे अनुप्रयोगों की तरह:
23> eprof:start().
{ok,<0.95.0>}
Eprof दो रूपरेखा मोड का समर्थन करता। आप इसे कॉल कर सकते हैं और एक निश्चित फ़ंक्शन को प्रोफाइल करने के लिए कह सकते हैं, लेकिन हम इसका उपयोग नहीं कर सकते क्योंकि अन्य प्रक्रियाएं सब कुछ गड़बड़ कर सकती हैं। हमें इसे मैन्युअल रूप से प्रोफाइलिंग शुरू करने की आवश्यकता है और इसे रोकने के लिए कहें (यही कारण है कि आपके पास एक आसान स्क्रिप्ट नहीं होगी)।
24> eprof:start_profiling([self()]).
profiling
यह सबकुछ प्रोफाइल करने के लिए ई-प्रॉफ को बताता है जो खोल से चलाया जाएगा और खोल से उत्पन्न होगा। नई प्रक्रियाओं को यहां शामिल किया जाएगा।
25> trade_calls:main_ab().
Spawned Carl: <0.99.0>
Spawned Jim: <0.101.0>
<0.100.0>
Jim: asking user <0.99.0> for a trade
Carl: <0.101.0> asked for a trade negotiation
Carl: accepting negotiation
Jim: starting negotiation
... <snip> ...
अब हम रूपरेखा को रोकने के लिए एक बार समारोह चल रहा किया जाता है eprof बता सकते हैं: मैं कुछ मनमाने ढंग से बहु समारोह मेरे पास है, जिसके बारे में 4 प्रक्रियाओं कुछ सेकंड के लिए एक दूसरे के साथ संवाद स्थापित करने spawns चलेंगे।
26> eprof:stop_profiling().
profiling_stopped
और हम लॉग चाहते हैं। Eprof उन्हें डिफ़ॉल्ट रूप से स्क्रीन पर प्रिंट करेगा। आप इसे eprof:log(File)
वाली फ़ाइल पर लॉग इन करने के लिए भी कह सकते हैं। फिर आप परिणामों का विश्लेषण करने के लिए कह सकते हैं। हम यह बताना विकल्प total
(अधिक विकल्पों के लिए manual देखें) के साथ एक एकल तालिका में सभी प्रक्रियाओं से रन टाइम संक्षिप्त करने के लिए:
27> eprof:analyze(total).
FUNCTION CALLS % TIME [uS/CALLS]
-------- ----- --- ---- [----------]
io:o_request/3 46 0.00 0 [ 0.00]
io:columns/0 2 0.00 0 [ 0.00]
io:columns/1 2 0.00 0 [ 0.00]
io:format/1 4 0.00 0 [ 0.00]
io:format/2 46 0.00 0 [ 0.00]
io:request/2 48 0.00 0 [ 0.00]
...
erlang:atom_to_list/1 5 0.00 0 [ 0.00]
io:format/3 46 16.67 1000 [ 21.74]
erl_eval:bindings/1 4 16.67 1000 [ 250.00]
dict:store_bkt_val/3 400 16.67 1000 [ 2.50]
dict:store/3 114 50.00 3000 [ 26.32]
और आप देख सकते हैं कि समय (50%) के सबसे खर्च किया जाता है dict में: स्टोर/3। परिणाम उत्पन्न करने में 16.67% लिया जाता है, एक और 16.67% erl_eval द्वारा लिया जाता है (यही कारण है कि आप खोल में छोटे कार्यों को चलाकर प्राप्त करते हैं - पार्सिंग उन्हें चलाने से अधिक लंबा हो जाता है)।
फिर आप वहां से जा सकते हैं। Erlang के साथ रनिंग रनिंग प्रोफाइल की मूल बातें हैं। देखभाल के साथ संभाल लें, ईप्रोफ उत्पादन प्रणाली पर या बहुत लंबे समय तक चलने वाले कार्यों के लिए काफी भार हो सकता है। विशेष रूप से एक उत्पादन प्रणाली पर।इस https://raw.github.com/virtan/eep/master/doc/sshot1.png एक परिणाम के रूप की तरह कुछ https://github.com/virtan/eep
आप मिल जाएगा:
वहाँ रहे हैं ungivens के एक जोड़े: यह एक है उत्पादन प्रणाली? 'eprof' और * विशेष रूप से *' fprof' चलते समय एक प्रदर्शन हिट होता है। दोनों नव-निर्मित प्रसंस्करण का पालन कर सकते हैं। आप नेटवर्क राउंड-ट्रिप जैसे कुछ और मापना चाहेंगे और इतने पर! सबसे आसान तरीका शायद मापने के लिए फ़ंक्शन के चारों ओर एक 'टाइमर: टीसी' कॉल इंजेक्ट करना है। वैकल्पिक रूप से, 'erlang: अब() 'ले लो और उसे दूसरी प्रक्रिया में भेज दें जो माप माप कर सकता है। –
आपको पृष्ठ पर अपनी ईप्रोफ स्क्रिप्ट (या वॉथथ्रू) कम है :) –