मैं अपने कार्यक्रमों में से एक पर रूबी-प्रोफाइलर चला गया। मैं यह समझने की कोशिश कर रहा हूं कि प्रत्येक फ़ील्ड का क्या अर्थ है। मुझे लगता है कि सब कुछ CPU समय है (और दीवार घड़ी का समय नहीं), जो शानदार है। मैं समझना चाहता हूं कि "---" क्या है। क्या वहां कुछ प्रकार की स्टैक जानकारी है। ए/बी का मतलब क्या है?रूबी-प्रोफेसर आउटपुट को समझना
Thread ID: 81980260
Total Time: 0.28
%total %self total self wait child calls Name
--------------------------------------------------------------------------------
0.28 0.00 0.00 0.28 5/6 FrameParser#receive_data
100.00% 0.00% 0.28 0.00 0.00 0.28 6 FrameParser#read_frames
0.28 0.00 0.00 0.28 4/4 ChatServerClient#receive_frame
0.00 0.00 0.00 0.00 5/47 Fixnum#+
0.00 0.00 0.00 0.00 1/2 DebugServer#receive_frame
0.00 0.00 0.00 0.00 10/29 String#[]
0.00 0.00 0.00 0.00 10/21 <Class::Range>#allocate
0.00 0.00 0.00 0.00 10/71 String#index
--------------------------------------------------------------------------------
100.00% 0.00% 0.28 0.00 0.00 0.28 5 FrameParser#receive_data
0.28 0.00 0.00 0.28 5/6 FrameParser#read_frames
0.00 0.00 0.00 0.00 5/16 ActiveSupport::CoreExtensions::String::OutputSafety#add_with_safety
--------------------------------------------------------------------------------
0.28 0.00 0.00 0.28 4/4 FrameParser#read_frames
100.00% 0.00% 0.28 0.00 0.00 0.28 4 ChatServerClient#receive_frame
0.28 0.00 0.00 0.28 4/6 <Class::Lal>#safe_call
--------------------------------------------------------------------------------
0.00 0.00 0.00 0.00 1/6 <Class::Lal>#safe_call
0.00 0.00 0.00 0.00 1/6 DebugServer#receive_frame
0.28 0.00 0.00 0.28 4/6 ChatServerClient#receive_frame
100.00% 0.00% 0.28 0.00 0.00 0.28 6 <Class::Lal>#safe_call
0.21 0.00 0.00 0.21 2/4 ChatUserFunction#register
0.06 0.00 0.00 0.06 2/2 ChatUserFunction#packet
0.01 0.00 0.00 0.01 4/130 Class#new
0.00 0.00 0.00 0.00 1/1 DebugServer#profile_stop
0.00 0.00 0.00 0.00 1/33 String#==
0.00 0.00 0.00 0.00 1/6 <Class::Lal>#safe_call
0.00 0.00 0.00 0.00 5/5 JSON#parse
0.00 0.00 0.00 0.00 5/8 <Class::Log>#log
0.00 0.00 0.00 0.00 5/5 String#strip!
--------------------------------------------------------------------------------
मैं यह इंगित करना चाहूंगा कि यदि आप डीबगर के तहत भागते हैं, इसे मैन्युअल रूप से बाधित करते हैं, और कॉल स्टैक को प्रदर्शित करते हैं, तो 4 बार, उन नमूने के औसत 3 पर यह होगा: 'read_frames -> get_frame -> safe_call -> रजिस्टर -> ... 'तो आपकी बाधा ध्यान के लिए आपके लिए चिल्ला रही होगी। यह [यह विधि] है (http://stackoverflow.com/questions/375913/what-can-i-use-to-profile-c-code-in-linux/378024#378024)। शेष 25% समय अधिकतर है ... -> पैकेट -> ... '। बाकी सब कुछ मूल रूप से अप्रासंगिक है। –
@ माइक, यह उपयोगी होगा अगर आपने यह निष्कर्ष निकाला कि आप इस निष्कर्ष को आकर्षित करने के लिए ग्राफ की व्याख्या कैसे करते हैं, क्योंकि मुझे लगता है कि यह प्रश्न यह है कि यह प्रश्न कैसे प्राप्त करने की कोशिश कर रहा है (इस आउटपुट की व्याख्या कैसे करें)। यह मेरे लिए उपयोगी होगा! –
@ चार्ल्स: मैं "कुल" कॉलम देख रहा हूं, जो स्टैक पर बिताए गए समय की मात्रा है। लाइनों का पहला समूह 'read_frames' के बारे में है। इसका पूरा समय 'get_frame' को कॉल करने में बिताया जाता है। लाइनों का तीसरा गुच्छा 'get_frame' के बारे में है, जो अपना पूरा समय' safe_call' में बिताता है। चौथा गुच्छा कहता है कि 'safe_call' अपना अधिकांश समय' रजिस्टर 'में रखता है, फिर' पैकेट 'और' नया 'में थोड़ा सा खर्च करता है। (दूसरा गुच्छा कहता है 'get_data' हमेशा शीर्ष पर होता है।) –