2012-02-25 107 views
1

我需要配置ruby gems內存使用情況。 https://stackoverflow.com/a/164206/391229建議使用系統調用來測量內存佔用量,所以最後使用方法require和收集統計數據。需要調用分析ruby內存使用情況

的啓動腳本的頂部(在我的情況下,它/usr/bin/padrino):

$memstat = {} 
$memusage = `pmap #{Process.pid} | tail -1`[10,40].strip.to_i 
$memstat['base'] = $memusage 

alias :old_require :require 
def require *args 
    result = old_require *args 
    oldmem = $memusage 
    $memusage = `pmap #{Process.pid} | tail -1`[10,40].strip.to_i 
    delta = $memusage - oldmem 
    $memstat[args[0]] ||= 0 
    $memstat[args[0]] += delta 
    result 
end 

加載一切(Padrino.after_load)後的事件:

stat = $memstat.select{ |k,v| v>0 }.to_a.sort{ |a,b| a[1]<=>b[1] } 
summ = 0 
stat.each do |row| 
    summ += row[1] 
    puts "#{row[1].to_s.rjust(7)} KB: #{row[0]}" 
end 
puts summ.to_s.rjust(7) + ' KB' 

我得到上調用padrino console輸出是:

 ... 
    2120 KB: redcarpet.so 
    2184 KB: socket.so 
    2220 KB: etc 
    2332 KB: addressable/idna/pure 
    2740 KB: strscan 
    2992 KB: haml/buffer 
    3508 KB: pathname 
    4240 KB: psych.so 
    4252 KB: digest.so 
    6028 KB: /home/ujif/swift/admin/app.rb 
    6292 KB: zlib 
    6704 KB: readline 
    9116 KB: openssl.so 
    12408 KB: do_mysql/do_mysql 
    28164 KB: base 
145648 KB 

問題:

有沒有什麼辦法可以深入到base足跡?

是否有任何更清晰的方法來測量寶石磁共振成像內存佔用?> 1.9.2?

提高我的代碼的任何提示?

回答

2

是的,這是紅寶石堆棧。嘗試

$ irb 
>> `pmap #{Process.pid} | tail -1` 

你有類似的結果。

我的是:144512K

相反,如果運行:

$ ruby -e 'system "pmap #{Process.pid} | tail -1"' 

你較少值:27788K(礦)

所以要檢查什麼更好的恰巧回到IRB

$ irb 
>> puts `pmap #{Process.pid}` 

當你需要跟蹤padrino deps加載你的lib裏面irb

$ cd my_padrino_project 
$ irb -r /path/to/my/lib.rb 
>> require_relative 'config/boot' 

並檢查您的結果。