57 votes

La compréhension de ruby-prof de sortie

J'ai couru ruby-profiler sur un de mes programmes. J'essaie de comprendre ce que chaque champs veux dire. Je suppose que tout est en temps CPU (et pas de wall clock time), qui est fantastique. Je veux comprendre ce que "---" signifie. Est-il une sorte de pile de l'information. Ce n'appels a/b signifie?

Merci!

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!
--------------------------------------------------------------------------------

64voto

Pete Points 6648

Chaque section de l'ruby-prof de sortie est rompu dans l'examen d'une fonction particulière. par exemple, regardez la première section de votre sortie. Le read_frames méthode sur FrameParser est le point de mire, et il est essentiellement en disant ce qui suit:

  • 100% du temps d'exécution qui a été présenté était passé à l'intérieur de FrameParser#read_frames
  • FrameParser#read_frames a été appelé 6 fois.
  • De 5 des 6 appels à read_frames est venu de FrameParser#receive_data et cela représentait 100% du temps d'exécution (c'est la ligne au-dessus de la read_frames ligne).
  • Les lignes ci-dessous la read_frames (mais à l'intérieur de cette première section) méthode sont toutes les méthodes qui FrameParser#read_frames appels (vous devez être conscient que, puisqu'il semble comme il est de votre code), combien de méthodes total des appels read_frames est responsable de (a/b colonne appels), et combien de temps ces appels ont pris. Ils sont commandés par lequel d'entre eux a pris le plus de temps d'exécution. Dans votre cas, c'est receive_frame méthode sur la ChatServer classe.
  • Vous pouvez alors regarder vers le bas à la section consacrée à receive_frames (2 en bas et centré avec le "100% en ligne" sur receive_frame) et de voir comment c'est la performance est en panne. chaque article est présenté de la même manière et généralement la fonction ultérieure d'appel qui a pris le plus de temps est l'objet de la prochaine section. ruby-prof va continuer à le faire à travers la pile d'appel. Vous pouvez aller aussi profond que vous le souhaitez jusqu'à ce que vous trouver le goulot d'étranglement que vous souhaitez résoudre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X