Programing

ruby-prof 출력 이해

crosscheck 2020. 12. 25. 23:01
반응형

ruby-prof 출력 이해


내 프로그램 중 하나에서 ruby-profiler를 실행했습니다. 각 필드가 의미하는 바를 파악하려고합니다. 모든 것이 CPU 시간 (벽시계 시간이 아님)이라고 생각합니다. 환상적입니다. "---"가 무엇을 의미하는지 이해하고 싶습니다. 거기에 일종의 스택 정보가 있습니까? 통화 a / b는 무엇을 의미합니까?

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

ruby-prof 출력의 각 섹션은 특정 기능의 검사로 나뉩니다. 예를 들어, 출력의 첫 번째 섹션을보십시오. FrameParser의 read_frames 메소드가 초점이며 기본적으로 다음과 같습니다.

  • 프로파일 링 된 실행 시간의 100 %가 FrameParser # read_frames 내부에서 소비되었습니다.
  • FrameParser # read_frames가 6 번 호출되었습니다.
  • 6 개의 read_frame 호출 중 5 개는 FrameParser # receive_data에서 왔으며 이는 실행 시간의 100 %를 차지했습니다 (read_frames 라인 위의 라인).
  • read_frames (첫 번째 섹션 내) 메서드 아래의 줄은 FrameParser # read_frames가 호출하는 모든 메서드입니다 (이것이 코드 인 것처럼 보이므로 알고 있어야합니다). 총 호출 read_frames가 담당하는 메서드 수 (a / b 통화 열) 및 해당 통화에 걸린 시간. 실행 시간을 가장 많이 차지한 항목에 따라 정렬됩니다. 귀하의 경우에는 ChatServer 클래스의 receive_frame 메서드입니다.
  • 그런 다음 receive_frames (receive_frame의 '100 %'라인을 중심으로 2, 가운데)에 초점을 맞춘 섹션을보고 성능이 어떻게 분류되는지 확인할 수 있습니다. 각 섹션은 동일한 방식으로 설정되며 일반적으로 가장 많은 시간이 소요 된 후속 함수 호출이 다음 섹션의 초점입니다. ruby-prof는 전체 호출 스택을 통해이 작업을 계속합니다. 해결하려는 병목 현상을 찾을 때까지 원하는만큼 깊이 들어갈 수 있습니다.

참조 URL : https://stackoverflow.com/questions/5366553/understanding-ruby-prof-output

반응형