首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >理解ruby-prof输出

理解ruby-prof输出
EN

Stack Overflow用户
提问于 2011-03-20 11:17:44
回答 1查看 9K关注 0票数 60

我在我的一个程序上运行了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!
--------------------------------------------------------------------------------
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-20 11:25:04

ruby-prof输出的每个部分都被分解为一个特定函数的检查。例如,查看输出的第一部分。FrameParser上的read_frames方法是重点,它基本上是这样说的:

所分析的

  • 100%的执行时间在FrameParser#read_frames
  • FrameParser#read_frames内部被调用了6次。对read_frames的6次调用中有5次来自FrameParser#receive_data,这占了100%的执行时间(这是read_frames行之上的行)。
  • read_frames (但在第一部分中)方法下面的行是FrameParser#read_frames调用的所有方法(您应该注意这一点,因为这似乎是您的代码)。read_frames负责方法总调用的数量( a/b调用列),以及这些调用花费了多少时间。它们是根据它们中哪一个占用的执行时间最多来排序的。在您的例子中,这是ChatServer类上的receive_frame方法。
  • 然后您可以向下查看关注receive_frames的部分(向下2,并以receive_frame上的“100%”行居中),看看它的性能是如何分解的。每一节都是以相同的方式设置的,通常后续的函数调用花费的时间最多,这是下一节的重点。ruby-prof将在整个调用堆栈中继续执行此操作。你可以尽可能深入,直到找到你想解决的瓶颈。
票数 68
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5366553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档