>

浅析Ruby中的Profiling工具的用法

- 编辑:www.bifa688.com -

浅析Ruby中的Profiling工具的用法

置于的profiler达成的很简短,在ruby2.第22中学唯有150行代码,大家能够看看它的达成profile.rb 。内置的profiler使用起来非常的有益,只需求加上-rprofile参数就可以。举例:

必发88手机版,探望哪些调节和测量检验Ruby的习性难题

李哲 — APRIL 08, 2015

浅析Ruby中的Profiling工具的用法,rubyprofiling

放置的profiler落成的极粗略,在ruby2.第22中学惟有150行代码,我们能够看看它的完毕profile.rb 。内置的profiler使用起来极度的福利,只要求增添-rprofile参数就能够。举个例子:

执行:

ruby -rprofile test.rb

出口结果为:

必发88手机版 1

通过打字与印刷出的结果可见很令人侧指标见到耗费时间的艺术。内置的profiler很简短,只好打字与印刷出那般的结果,未有别的输出格式的选项,下边介绍的别的二种都有丰富的格式输出。
ruby-prof

repo:

ruby-prof具有C增加,所以它能运作的更加快,同期它援助增多的输出格式,方便大家去寻找质量瓶颈。 ruby-prof协理出口GraphViz补助的dot格式,两个的装置形式如下:

gem install ruby-prof

ubuntu | sudo apt-get install graphviz
Mac  | brew install graphviz

推行命令很简短,如下:

ruby-prof --mode=wall --printer=dot --file=output.dot test.rb 25

此命令的事无巨细使用方法请参见协助消息ruby-prof --help。

地点命令的奉行结果会输出二个graphviz的dot文件,graphviz提供一个格式调换命令,能够将此文件 转变为二个pdf文件以有益查看,如下:

dot -T pdf -o output.pdf output.dot

这么就足以张开output.pdf查看程序内的点子调用占比了。

必发88手机版 2
perftools.rb

repo:

perftools.rb是google-perftools的ruby版本,不过它只补助ruby2.1以下版本,2.1及以上 版本就须求选拔上面包车型大巴stackprof了,这两个工具都以壹人写的。鉴于此,大家略过perftools.rb, 作者达成stackprof,正是为着代替perftools.rb。就算有供给的话,就请参谋其github主页。
stackprof

repo:

stackprof只补助Ruby2.1 ,然而今后ruby的本子发布十分的快,每叁个本子都能拉动一些新东西,2.1 应该连忙就会变成很基础的本子,大家就在这几个版本上来做一些测量检验。

安装:

gem install stackprof

此次大家直接在代码中运用stackprof的措施:

require 'stackprof'

def m1
 5_000_000.times{ 1 2 3 4 5 }
end

def m2
 1_000_000.times{ 1 2 3 4 5 }
end

StackProf.run(mode: :cpu, out: 'tmp/stackprof.dump') do
 m1
 m2
end

大家实行这么些ruby程序,ruby test.rb,会在当前目录的tmp目录中产生四个文件stackprof.dump, 然后来解析以下那一个文件,stackprof命令自个儿能够深入分析那一个文件,推行下边包车型客车授命:

stackprof tmp/stackprof.dump --text

则会生出上边的结果,结果应该是很清楚的,很鲜明在代码中m1格局要据有绝大多数的运作时刻。

==================================
 Mode: cpu(1000)
 Samples: 75 (0.00% miss rate)
 GC: 0 (0.00%)
==================================
   TOTAL  (pct)   SAMPLES  (pct)   FRAME
    62 (82.7%)     62 (82.7%)   block in Object#m1
    13 (17.3%)     13 (17.3%)   block in Object#m2
    75 (100.0%)      0  (0.0%)   <main>
    75 (100.0%)      0  (0.0%)   block in <main>
    75 (100.0%)      0  (0.0%)   <main>
    62 (82.7%)      0  (0.0%)   Object#m1
    13 (17.3%)      0  (0.0%)   Object#m2

任何更为助长的出口情势和深入分析方法,就请参见stackprof的github主页,疏解的很圆满。

若是您愿意在web前端中展现相关新闻,就请看看stackprof-webnav这一个gem,它提供了相比较健全的 展示,操作等等,适合在部分web应用中动用,github地址:stackprof-webnav
rack-mini-profiler

repo:

rack-mini-profiler特地选取于基于rack的web应用的天性调优,在rails中的使用办法如下:

首先将gem添加到gemfile中:

gem 'rack-mini-profiler'

执行:

bundle install

然后重启你的服务器,访问任性的U昂Coral,在页面上的左上角会看到响应时间的皮秒数。如下图所示:

必发88手机版 3

点击query time(ms)列中的1 sql则足以查看到实施的sql语句及耗费时间:

必发88手机版 4

内置的profiler达成的相当的粗略,在ruby2.第22中学只有150行代码,我们能够看看它的兑现profile.rb 。内置的...

执行:

Ruby内置的profiler

置于的profiler达成的很简短,在ruby2.第22中学唯有150行代码,大家能够看看它的贯彻profile.rb 。内置的profiler使用起来极其的造福,只须要丰裕-rprofile参数就可以。譬喻:

执行:

ruby -rprofile test.rb
出口结果为:

 %   cumulative   self              self     total
time   seconds   seconds    calls  ms/call  ms/call  name
24.24     0.16      0.16    10001     0.02     0.06  Object#m2
18.18     0.28      0.12        2    60.00   330.00  Integer#times
18.18     0.40      0.12    10001     0.01     0.06  Object#m1
15.15     0.50      0.10    10001     0.01     0.01  Class#new
10.61     0.57      0.07    10000     0.01     0.01  P1.new
 6.06     0.61      0.04    20000     0.00     0.00  Fixnum#to_s
 4.55     0.64      0.03    10000     0.00     0.00  Struct#initialize
 3.03     0.66      0.02    10000     0.00     0.00  P2#initialize
 0.00     0.66      0.00        1     0.00     0.00  TracePoint#enable
 0.00     0.66      0.00        1     0.00     0.00  Class#initialize
 0.00     0.66      0.00        1     0.00     0.00  nil#
 0.00     0.66      0.00        1     0.00     0.00  Struct.new
 0.00     0.66      0.00        7     0.00     0.00  Module#method_added
 0.00     0.66      0.00        3     0.00     0.00  BasicObject#singleton_method_added
 0.00     0.66      0.00        2     0.00     0.00  Class#inherited
 0.00     0.66      0.00        2     0.00     0.00  IO#set_encoding
 0.00     0.66      0.00        1     0.00     0.00  TracePoint#disable
 0.00     0.66      0.00        1     0.00   660.00  #toplevel

通过打字与印刷出的结果可知很刚强的收看耗费时间的办法。内置的profiler很轻巧,只可以打字与印刷出那般的结果,没有其余输出格式的选项,上面介绍的别的三种都有充分的格式输出。

ruby -rprofile test.rb

ruby-prof

repo:

ruby-prof 具有C扩张,所以它能运作的越来越快,同一时候它辅助增添的输出格式,方便大家去探究品质瓶颈。 ruby-prof协理出口GraphViz 匡助的dot格式,两个的安装方式如下:

gem install ruby-prof

ubuntu | sudo apt-get install graphviz
Mac | brew install graphviz

施行命令相当粗略,如下:

ruby-prof --mode=wall --printer=dot --file=output.dot test.rb 25
此命令的详实使用格局请参谋援助音信ruby-prof --help。

位置命令的进行理并了结果会输出三个graphviz的dot文件,graphviz提供三个格式转变命令,能够将此文件调换为三个pdf文件以便于查看,如下:

dot -T pdf -o output.pdf output.dot

如此就能够展开output.pdf翻开程序内的格局调用占比了。
必发88手机版 5

出口结果为:

perftools.rb

repo:

perftools.rbgoogle-perftools的ruby版本,可是它只协理ruby2.1以下版本,2.1及以上 版本就供给使用下边的stackprof了,这七个工具都以一位写的。鉴于此,大家略过perftools.rb, 作者实现stackprof,便是为着替代perftools.rb。若是有须要的话,就请参照他事他说加以调查其github主页。

必发88手机版 6

stackprof

repo:

stackprof只协理Ruby2.1 ,可是以后ruby的本子宣布非常的慢,每三个版本都能带动一些新东西,2.1 应该比相当慢就会变成很基础的版本,我们就在那几个本子上来做一些测验。

安装:

gem install stackprof

本次我们平素在代码中选用stackprof的章程:

require 'stackprof'

def m1
  5_000_000.times{ 1 2 3 4 5 }
end

def m2
  1_000_000.times{ 1 2 3 4 5 }
end

StackProf.run(mode: :cpu, out: 'tmp/stackprof.dump') do
  m1
  m2
end

作者们施行那一个ruby程序,ruby test.rb,会在当前目录的tmp目录中产生多少个文件stackprof.dump, 然后来分析以下这么些文件,stackprof一声令下本身能够深入分析那么些文件,施行下边包车型地铁命令:

stackprof tmp/stackprof.dump --text

则会爆发上边包车型地铁结果,结果应当是很清楚的,很显眼在代码中m1主意要占用绝大部分的运营时刻。

  Mode: cpu(1000)
   Samples: 75 (0.00% miss rate)
   GC: 0 (0.00%)
=====================================================================
     TOTAL    (pct)     SAMPLES    (pct)     FRAME
        62  (82.7%)          62  (82.7%)     block in Object#m1
        13  (17.3%)          13  (17.3%)     block in Object#m2
        75 (100.0%)           0   (0.0%)     <main>
        75 (100.0%)           0   (0.0%)     block in <main>
        75 (100.0%)           0   (0.0%)     <main>
        62  (82.7%)           0   (0.0%)     Object#m1
        13  (17.3%)           0   (0.0%)     Object#m2

其余更为足够的输出格局和分析方法,就请参照他事他说加以考察stackprof的github主页,讲授的很周详。

比方你希望在web前端中彰显相关新闻,就请看看stackprof-webnav这个gem,它提供了比较健全的 突显,操作等等,适合在局地web应用中利用,github地址:stackprof-webnav

透过打字与印刷出的结果能够很显明的看到耗费时间的艺术。内置的profiler很简短,只可以打字与印刷出那样的结果,没有其余输出格式的选项,上边介绍的其余三种都有增进的格式输出。
ruby-prof

rack-mini-profiler

repo:

rack-mini-profiler非常接纳于凭借rack的web应用的性质调优,在rails中的使用方法如下:

首先将gem添加到gemfile中:

gem 'rack-mini-profiler'

执行:

bundle install

下一场重启你的服务器,访问大肆的UXC60l,在页面上的左上角会看到响应时间的皮秒数。如下图所示:
必发88手机版 7

点击query time(ms)列中的1 sql则能够查阅到实践的sql语句及耗费时间:
必发88手机版 8
* 本文作者系OneAPM程序猿李哲 ,想阅读愈来愈多好的技能作品,请访问OneAPM官方才具博客。**

repo:

ruby-prof具备C扩大,所以它能运维的越来越快,同期它援救增添的出口格式,方便大家去搜索品质瓶颈。 ruby-prof帮衬出口GraphViz援助的dot格式,两个的装置情势如下:

gem install ruby-prof

ubuntu | sudo apt-get install graphviz
Mac  | brew install graphviz

施行命令很简短,如下:

ruby-prof --mode=wall --printer=dot --file=output.dot test.rb 25

此命令的详实使用办法请参照他事他说加以考察帮衬音信ruby-prof --help。

下面命令的实践结果会输出三个graphviz的dot文件,graphviz提供多个格式转换命令,能够将此文件 调换为三个pdf文件以有益查看,如下:

dot -T pdf -o output.pdf output.dot

那般就足以展开output.pdf查看程序内的点子调用占比了。

必发88手机版 9
perftools.rb

repo:

perftools.rb是google-perftools的ruby版本,但是它只帮忙ruby2.1之下版本,2.1及以上 版本就须要使用上边包车型大巴stackprof了,那七个工具都以一人写的。鉴于此,大家略过perftools.rb, 笔者达成stackprof,正是为着替代perftools.rb。假设有供给的话,就请参见其github主页。
stackprof

repo:

stackprof只援助Ruby2.1 ,但是今后ruby的本子揭橥一点也不慢,每多个版本都能带来一些新东西,2.1 应该异常快就会形成很基础的版本,我们就在那一个版本上来做一些测验。

安装:

gem install stackprof

本次大家直接在代码中应用stackprof的秘籍:

require 'stackprof'

def m1
 5_000_000.times{ 1 2 3 4 5 }
end

def m2
 1_000_000.times{ 1 2 3 4 5 }
end

StackProf.run(mode: :cpu, out: 'tmp/stackprof.dump') do
 m1
 m2
end

我们实行这一个ruby程序,ruby test.rb,会在当前目录的tmp目录中发出二个文书stackprof.dump, 然后来解析以下那几个文件,stackprof命令自个儿能够解析这几个文件,实践上边包车型客车指令:

stackprof tmp/stackprof.dump --text

则会发出上边包车型大巴结果,结果应当是很清晰的,很刚烈在代码中m1办法要霸占绝超越四分之二的运维时刻。

==================================
 Mode: cpu(1000)
 Samples: 75 (0.00% miss rate)
 GC: 0 (0.00%)
==================================
   TOTAL  (pct)   SAMPLES  (pct)   FRAME
    62 (82.7%)     62 (82.7%)   block in Object#m1
    13 (17.3%)     13 (17.3%)   block in Object#m2
    75 (100.0%)      0  (0.0%)   <main>
    75 (100.0%)      0  (0.0%)   block in <main>
    75 (100.0%)      0  (0.0%)   <main>
    62 (82.7%)      0  (0.0%)   Object#m1
    13 (17.3%)      0  (0.0%)   Object#m2

任何更为助长的出口格局和剖析方法,就请参见stackprof的github主页,疏解的很周到。

借使您期望在web前端中呈现相关音信,就请看看stackprof-webnav那一个gem,它提供了相比较完美的 展现,操作等等,适合在有的web应用中运用,github地址:stackprof-webnav
rack-mini-profiler

repo:

rack-mini-profiler特意使用于基于rack的web应用的特性调优,在rails中的使用办法如下:

首先将gem添加到gemfile中:

gem 'rack-mini-profiler'

执行:

bundle install

接下来重启你的服务器,访问大肆的U宝马7系l,在页面上的左上角会看到响应时间的微秒数。如下图所示:

必发88手机版 10

点击query time(ms)列中的1 sql则足以查看到实施的sql语句及耗时:

必发88手机版 11

你只怕感兴趣的篇章:

  • 在Ruby on Rails中使用Rails Active Resource的教程
  • 举个例子明白Ruby on Rails的页面缓存机制
  • 在Ruby on Rails中优化ActiveRecord的方法

本文由必发88手机版发布,转载请注明来源:浅析Ruby中的Profiling工具的用法