2012-07-13 7 views
5

Estoy intentando hacer un perfil de GC en una aplicación que no sea de Rails, preferiblemente usando YARV Ruby.Cómo crear un perfil de la recolección de basura en Ruby

perftools.rb me dice que la mayor parte del tiempo de mi CPU se gasta en garbage_collector (6061 (61.4%)).

También puedo obtener cuántos objetos se crean mediante qué métodos con perftools.rb. Algunos métodos crean más objetos que otros, pero no es extremadamente sesgado.

¿A dónde voy desde aquí? ¿Es posible obtener información más detallada sobre por qué está gastando tanto tiempo en GC? ¿Es posible ver si el tiempo se usa para deshacerse de los objetos, o si se gasta en verificar si un objeto debe ser recogido o no?

Tengo acceso a OS X Lion, Windows 7 y Ubuntu 12.04.

Respuesta

1

En osx tiene dtrace. Hay proveedores dtrace en YARV ruby.

Usted tiene un par de sondas relacionados con la GC que se pueden utilizar:

gc-gc-comenzar final gc-marca-begin gc-baliza del extremo de gc-barrida de comenzar GC- sweep-end

Creo que pueden ayudarlo a encontrar lo que el GC de su programa está haciendo. Eche un vistazo a este archivo para ver cómo usarlos: https://github.com/tenderlove/ruby/blob/probes/test/dtrace/test_gc.rb.

Y este post para más explicaciones: http://tenderlovemaking.com/2011/06/29/i-want-dtrace-probes-in-ruby.html

Hay un insecto abierto en rubí http://bugs.ruby-lang.org/issues/2565 donde se puede encontrar un parche para aplicar al rubí tener esas sondas o puede utilizar https://github.com/tenderlove/ruby/tree/probes, donde ya se aplica el parche.

Espero que esto ayude

Cuestiones relacionadas