Question

J'ai besoin de profiler l'utilisation de la mémoire Ruby Gems. https://stackoverflow.com/a/164206/391229 suggère d'utiliser un appel système pour mesurer l'empreinte de la mémoire, donc s'est retrouvée avec un aliasage require Méthode et collecte de statistiques.

Le haut du script de démarrage (dans mon cas, c'est /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

L'événement après avoir tout chargé (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'

La sortie que je reçois invoquer padrino console est:

        ...
   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

Des questions:

Y a-t-il un moyen de creuser base empreinte?

Existe-t-il une approche plus propre pour mesurer l'empreinte de la mémoire des gemmes sur l'IRM ~> 1.9.2?

Des conseils sur l'amélioration de mon code?

Était-ce utile?

La solution

Oui, c'est la pile Ruby. Essayer

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

Vous avez un résultat similaire.

Le mien est: 144512k

À la place si vous courez:

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

Vous avez moins de valeur: 27788K (le mien)

Donc, pour mieux inspecter ce qui se passe, revenez à la CRR

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

Quand tu dois suivre padrino Deps chargez votre lib à l'intérieur de la CRI

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

et vérifiez vos résultats.

Autres conseils

Pour les développeurs Windows: jetez un œil au https://github.com/ruby-prof/ruby-prof gemme.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top