2012-07-13 23 views
5

Sto provando a creare un profilo GC in un'applicazione non Rails, preferibilmente utilizzando YARV Ruby.Come profilare la garbage collection in Ruby

perftools.rb mi dice che la maggior parte del tempo della mia CPU viene spesa in garbage_collector (6061 (61,4%)).

Sono anche in grado di ottenere quanti oggetti vengono creati con quali metodi con perftools.rb. Alcuni metodi creano più oggetti di altri, ma non sono estremamente distorti.

Dove vado da qui? È possibile ottenere informazioni più dettagliate sul perché spende così tanto tempo a fare GC? È possibile vedere se il tempo viene impiegato per sbarazzarsi di oggetti o se è speso controllare se un oggetto debba essere raccolto o no?

Ho accesso a OS X Lion, Windows 7 e Ubuntu 12.04.

risposta

1

Su osx avete dtrace. Ci sono fornitori di dtrace in rubino YARV.

Hai un paio di sonde legate alla GC che è possibile utilizzare:

gc-begin gc-end gc-mark-iniziare gc-mark-end gc-sweep-begin GC- sweep-end

Penso che possano aiutare a trovare ciò che sta facendo il GC nel programma. dai un'occhiata a questo file per vedere come usarli: https://github.com/tenderlove/ruby/blob/probes/test/dtrace/test_gc.rb.

E questo post per ulteriori spiegazioni: http://tenderlovemaking.com/2011/06/29/i-want-dtrace-probes-in-ruby.html

C'è un bug aperto in Ruby http://bugs.ruby-lang.org/issues/2565 dove è possibile trovare una patch da applicare al rubino per avere quelle sonde oppure è possibile utilizzare https://github.com/tenderlove/ruby/tree/probes in cui è già applicato la patch.

Spero che questo aiuti