2011-02-13 8 views
19

Conozco GC.enable/disable, pero ¿hay alguna forma de controlar el recolector de basura Ruby 1.9 con más detalle?Ajuste del recolector de basura en Ruby 1.9

Al perfilar mi código (utilizando perftools.rb) noté que el GC representa hasta el 30% de las muestras totales, y me gustaría ver si es posible ajustar el GC para disminuir este número. ¿Hay alguna variable de entorno u otro medio por el cual puede establecer el número de ranuras de pila, el límite de malloc, etc. como lo hace con REE?

Respuesta

1

No hay manera de sintonizar la 1.9.0-1.9.2 GC. Sin embargo, puede compilar una máquina virtual personalizada que exponga más o menos los mismos parámetros de ajuste que REE con this patch.

+0

La esencia tiene un comentario que la configurabilidad de GC se sugiere en el rastreador de problemas: http://redmine.ruby-lang.org/issues/1047 –

+0

1.9.3 tendrá parámetros de ajuste como REE, pero es ruidoso. Ver los comentarios a esta publicación: http://www.rubyinside.com/ruby-1-9-3-preview-1-released-5229.html – Theo

11

Sí, para abreviar.

Al principio, constantes básicas, definiendo comportamiento GC (se muestran valor por defecto):

  • RUBY_GC_MALLOC_LIMIT = 8000000 # - Tamaño inicial de una nueva losa de memoria, que se asigna después de consumir toda la memoria disponible
  • RUBY_HEAP_MIN_SLOTS = 10000 # - Tamaño de la memoria inicial, asignado al inicio
  • RUBY_HEAP_SLOTS_GROWTH_FACTOR = 1,8 # - La nueva losa de la memoria es X veces más grande que el anterior después de cada asignación.
  • RUBY_HEAP_SLOTS_INCREMENT = 1 # No estoy seguro, la verdad :)

More details about GC, may help

A story from 37signals chicos, que puede definitivamente ayudarle. Utilizaron llamadas GC manuales (GC.start) a tiempo, en lugar de tamaño de memoria, y obtuvieron un gran impulso.

+0

Aman & Joe hablan de estas constantes en su presentación, pero por lo que puedo decir, en realidad son las mismas configuraciones de REE que mencioné en mi pregunta. ¿Me equivoco o me puedes dar un ejemplo de cómo usarlos en un Vanilla Ruby 1.9 VM? – Theo

+0

Estoy bastante seguro de que esto es 1) solo 1.8.7 y 2), incluso en 1.8.7 requiere que parchees y compiles una VM personalizada. Hay un nuevo parche para 1.9.2 que se lanzó mucho después de su respuesta, pero todavía requiere que compile una máquina virtual personalizada. – Theo

+0

esto solo funciona con REE y con 1.9.3, creo. – rogerdpack

Cuestiones relacionadas