2012-07-13 11 views
5

Próbuję profilować GC w aplikacji innej niż Rails, najlepiej przy użyciu YARV Ruby.Jak profilować zbieranie śmieci w Ruby

perftools.rb mówi mi, że większość mojego czasu procesora spędza w garbage_collector (6061 (61,4%)).

Jestem również w stanie uzyskać ilu obiektów są tworzone przez jakie metody z perftools.rb. Niektóre metody generują więcej obiektów niż inne, ale nie są bardzo zniekształcone.

Gdzie mam przejść? Czy można uzyskać bardziej szczegółowe informacje na temat tego, dlaczego spędza się tak dużo czasu na GC? Czy jest możliwe sprawdzenie, czy czas poświęcony jest na pozbycie się przedmiotów, czy też spędzony jest na sprawdzaniu, czy obiekt powinien być zbiorem śmieci, czy nie?

Mam dostęp do OS X Lion, Windows 7 i Ubuntu 12.04.

Odpowiedz

1

Na osx masz dtrace. W rubryce YARV znajdują się dostawcy dtrace.

Masz kilka sond związanych z GC, które można użyć:

GC-begin GC-end GC-znak-rozpocząć GC-Mark-end GC-Pozamiatać rozpocząć GC zamiatanie-kreska

Myślę, że oni mogą pomóc znaleźć to, co GC w twoim programie robi. spójrz na ten plik, aby zobaczyć, jak z nich korzystać: https://github.com/tenderlove/ruby/blob/probes/test/dtrace/test_gc.rb.

I po więcej wyjaśnień: http://tenderlovemaking.com/2011/06/29/i-want-dtrace-probes-in-ruby.html

Jest to błąd otwarty w Ruby http://bugs.ruby-lang.org/issues/2565 gdzie można znaleźć patch zastosowanie do ruby ​​mieć te sondy lub użyć https://github.com/tenderlove/ruby/tree/probes gdzie łatka jest już stosowany.

Mam nadzieję, że to pomoże