namarecoのprofile結果

  • namarecoの負荷が従来の2〜3倍になっているのでprofileを取ろうとしてみた
  • RTMP部に注目したかったので実際にはnamarecoの代わりにimarecoを使用
  • ファイルが生成されるところまで動かしたがRubyのprofileはとても重く定常状態までは動かせなかった
    • そのため初期化の部分が相対的に大きくカウントされている可能性がある
  • 結果
  %   cumulative   self              self     total
 time   seconds   seconds    calls  ms/call  ms/call  name
  5.50    11.25     11.25     2093     5.38   174.53  Array#each
  4.34    20.14      8.89     1727     5.15    13.36  Array#push
  4.07    28.48      8.34     1264     6.60   101.17  REXML::Element#namespace
  3.88    36.43      7.95     1290     6.16    32.32  REXML::Attributes#get_attribute
  3.04    42.66      6.23     2020     3.08     7.19  REXML::Element#root
  2.54    47.86      5.20      262    19.85   251.41  Kernel.require
  2.48    52.93      5.07    11924     0.43     0.54  Kernel.kind_of?
  2.47    57.98      5.05     1290     3.91    62.93  REXML::Attributes#
  2.39    62.87      4.89     1691     2.89    24.20  Enumerable.find
  2.34    67.66      4.79     3930     1.22     1.60  String#==
  2.16    72.08      4.42      281    15.73    35.09  REXML::Parsers::BaseParser#pull
  1.91    76.00      3.92     1691     2.32     2.34  String#=~
  1.71    79.51      3.51      483     7.27    10.68  IO#write
  1.53    82.64      3.13     1533     2.04    16.15  Kernel.rand
  1.51    85.73      3.09     2654     1.16     1.57  String#<<
  1.34    88.47      2.74     1391     1.97   263.12  Class#new
  1.20    90.92      2.45     5541     0.44     0.61  NilClass#nil?
  1.14    93.26      2.34     5274     0.44     0.47  Kernel.nil?
  1.08    95.47      2.21     1478     1.50    15.01  REXML::Element#document
  0.98    97.48      2.01       52    38.65  1148.46  Array#delete_if
  0.96    99.45      1.97      261     7.55    75.56  MonitorMixin.synchronize
  0.92   101.33      1.88     1312     1.43    30.23  REXML::Document#doctype
  0.91   103.19      1.86       99    18.79   109.60  Kernel.gem_original_require
  0.90   105.04      1.85       12   154.17  1787.50  REXML::Parsers::TreeParser#parse
  0.90   106.89      1.85      142    13.03    39.30  Rtmp#read
  0.89   108.72      1.83      261     7.01    31.23  MonitorMixin.mon_exit
  0.89   110.55      1.83      273     6.70    10.37  Fixnum#**
  0.87   112.33      1.78     2440     0.73     2.27  Integer#to_int
  0.85   114.06      1.73      261     6.63    10.54  Thread#pass
  0.85   115.79      1.73     2990     0.58     5.64  String#
  0.80   117.43      1.64      157    10.45    35.29  REXML::Attributes#[]=
  0.79   119.05      1.62      189     8.57    82.80  Range#each
  0.78   120.64      1.59      261     6.09   349.16  Logger#add
  • 考察
    • REXMLが目立つ
      • プログラムの初期部分だから各種API処理の負荷が多くカウントされているだけかもしれない
      • それでもREXMLをlibxml-rubyに置換してみるのはとりあえずやってみる価値はあるか?
    • Array#eachとArray#pushはそれぞれどこから呼び出されたものかまで見れると対応のしようもありそうだが