Programlarımdan birinde ruby-profiler çalıştırdım. Her alanın ne anlama geldiğini anlamaya çalışıyorum. Sanırım her şey CPU zamanı (ve duvar saati değil), bu harika bir şey. "---" nin ne anlama geldiğini anlamak istiyorum. Orada bir çeşit yığın bilgisi var mı? A/b'nin anlamı nedir?Ruby-prof çıkışını anlama
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!
--------------------------------------------------------------------------------
Hata ayıklayıcı altında çalıştırırsanız, el ile kesme ve çağrı yığınının 4 kez görüntülenmesi, bu örneklerin ortalama 3'ünün aşağıdaki gibi olacağını belirtmek isterim: 'read_frames -> receive_frame -> safe_call -> register -> ... 'bu yüzden darboğazınız dikkatiniz için size bağırıyor olacak. Bu [bu yöntem] (http://stackoverflow.com/questions/375913/what-can-i-use-to-profile-c-code-in-linux/378024#378024). Zamanın kalan% 25'i çoğunlukla ... -> paket -> ... 'dir. Diğer her şey temel olarak ilgisizdir. –
@Mike, Grafiğin bu sonucu nasıl yorumlayacağınızı anlatırsanız, bu sorunun nasıl elde edildiğini (bu çıkışı nasıl yorumlayacağımız) bu olduğunu düşündüğümden, yardımcı olabilirsiniz. Benim için yararlı olur! –
@Charles: "Toplam" sütununa bakıyorum, bu da yığın üzerinde harcanan zaman miktarı. İlk grup çizgisi "read_frames" hakkında. Tüm zaman, "get_frame" i çağırmak için harcanır. Üçüncü satırlar, tüm zamanını 'safe_call' içinde harcayan "get_frame" ile ilgilidir. Dördüncü grup 'safe_call'' zamanının çoğunu' register''da, sonra 'packet''te ve' new''de biraz harcadığını söylüyor. (İkinci grup, "get_data" nın her zaman en üstte olduğunu söylüyor.) –