2012-07-13 18 views
5

Tercihen YARV Ruby kullanan bir Rails uygulamasında GC profilini denemeye çalışıyorum.Ruby'de çöp toplama profili nasıl yapılır

perftools.rb bana, CPU zamanımın büyük kısmının garbage_collector (6061 (% 61.4)) içinde harcanmakta olduğunu söylüyor.

Ayrıca perftools.rb hangi yöntemlerle oluşturulduğunu da bulabiliyorum. Bazı yöntemler diğerlerinden daha fazla nesne yaratır, ancak aşırı derecede çarpık değildir.

Buradan nereye gidebilirim? GC'yi neden bu kadar zaman harcadığına dair daha detaylı bilgi almak mümkün mü? Nesnelerden kurtulmanın zamanının mı, yoksa bir nesnenin çöp toplayıp toplanıp toplanmadığının kontrol edilip edilmediğini görmek mümkün mü?

OS X Lion, Windows 7 ve Ubuntu 12.04 erişimim var.

cevap

1

Osx'de dtrace'iniz var. YARV ruby'de dtrace sağlayıcıları var.

Sen kullanabilirsiniz GC ile ilgili prob bir çift var:

gc-end gc-başlaması gc-mark-ucunun gc-mark-başlaması GC- gc-süpürme-başlaması temizleme sonu

Programınızdaki GC'nin ne yaptığını bulmaya yardımcı olabilirler. Bunların nasıl kullanıldığını görmek için bu dosyaya bakın: https://github.com/tenderlove/ruby/blob/probes/test/dtrace/test_gc.rb.

Ve daha açıklamalara Bu yazı: http://tenderlovemaking.com/2011/06/29/i-want-dtrace-probes-in-ruby.html Eğer bir yama bu sondalar olması yakut uygulanacak veya yama zaten uygulanmaktadır https://github.com/tenderlove/ruby/tree/probes kullanabilirsiniz bulabilirsiniz yakut http://bugs.ruby-lang.org/issues/2565 açıldı bir hata var

.

Bu yardımcı olur umarım