Как профилировать сборку мусора в Ruby

Я пытаюсь профилировать GC в не-Rails-приложении, желательно с использованием YARV Ruby.

perftools.rb говорит мне, что большая часть моего процессорного времени уходит на garbage_collector (6061 (61,4%)).

Я также могу узнать, сколько объектов создано какими методами с perftools.rb. Некоторые методы создают больше объектов, чем другие, но это не слишком искажено.

Куда мне идти отсюда? Можно ли получить более подробную информацию о том, почему он так много времени проводит в GC? Можно ли увидеть, потрачено ли время на избавление от объектов, или же оно потрачено на проверку того, должен ли объект собирать мусор или нет?

У меня есть доступ к OS X Lion, Windows 7 и Ubuntu 12.04.

1 ответ

На osx у вас есть dtrace. В YARV ruby ​​есть провайдеры dtrace.

У вас есть пара зондов, связанных с GC, которые вы можете использовать:

gc-begin gc-end gc-mark-begin gc-mark-end gc-sweep-begin gc-sweep-end

Я думаю, что они могут помочь найти, что делает GC в вашей программе. взгляните на этот файл, чтобы узнать, как их использовать: https://github.com/tenderlove/ruby/blob/probes/test/dtrace/test_gc.rb.

И этот пост для более объяснений: http://tenderlovemaking.com/2011/06/29/i-want-dtrace-probes-in-ruby.html

В ruby ​​открыта ошибка http://bugs.ruby-lang.org/issues/2565 где вы можете найти патч для применения к ruby, чтобы получить эти пробники, или вы можете использовать https://github.com/tenderlove/ruby/tree/probes, где патч уже применяется.

Надеюсь это поможет

Другие вопросы по тегам