[megoldva] Ruby memory profiling

Fórumok

Valakinek van az alábbira megoldása? Létrehoztam egy topic-ot Ruby fórumon:

http://www.ruby-forum.com/topic/4415034#1113447

Hozzászólások

Nezz ra a Rubiniusra, rengeteg stathoz hozza tudsz rbx konzolbol ferni. Linuxra elerheto, rvm install rbx-head.
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. 

Azt is jó lenne megtudni, hogy 2.0 terén lett-e ez irányba előrelépés. Neten egyelőre nem találtam erről infót.

Pedig ez fontos lenne. Ha lehetne látni egy olyan statisztikát memória peak értékekre, mint amilyet a "-r profile" ad külön metódusokhoz, akkor azonnal látható lenne, hogy mely részek a leg memória igényesebbek, és tudnánk mely részeket kellene átírnunk vagy újra gondolni.

Jelen esetben nem tudok erre megfelelő módszert vagy eszközt.

Nem nagyon érkezett megoldás senkitől, ezért még egyszer neki gyürkőztem. Az alábbi módon tudtam megoldani:

Maradtam a ruby-prof memory profiling megoldásánál patch-elt MRI-vel. Lásd:
https://github.com/ruby-prof/ruby-prof/issues/86
https://github.com/skaes/rvm-patchsets

1) ugye patch-elt MRI kell hozzá:

rvm reinstall 1.9.3 --patch railsexpress
gem-ruby-1.9.3-p448 install ruby-prof

2) példakód itt:

require "ruby-prof"

RubyProf.measure_mode = RubyProf::MEMORY
RubyProf.start
        # code to profile
        10000.times { "hello".chars.to_a.shuffle.join }
r = RubyProf.stop
RubyProf::FlatPrinter.new(r).print

3) kimenet így néz ki:

$ ruby-1.9.3-p448 test.rb 
Thread ID: 14925700
Fiber ID: 17378400
Total: 3842.242188
Sort by: self_time

 %self      total      self      wait     child     calls  name
 56.94   2187.766  2187.766     0.000     0.000    20000   String#chars 
 32.79   1259.953  1259.953     0.000     0.000    10000   Array#join 
 10.17    390.812   390.812     0.000     0.000    10000   Array#shuffle 
  0.07   3842.242     2.852     0.000  3839.391        1   Global#[No method] 
  0.01   1563.102     0.336     0.000  1562.766    10000   Enumerable#to_a 
  0.01   3839.391     0.336     0.000  3839.055        1   Integer#times 
  0.00   1562.766     0.188     0.000  1562.578    10000   Enumerator#each 

* indicates recursively called methods