Я не думаю, что вы можете добиться большего успеха с помощью MRI или YARV.
Однако у Рубиниуса есть встроенный профилировщик (просто вызов с -Xprofile
) с гораздо меньшими накладными расходами.
А с JRuby вы получаете весь массив инструментов Java, который включает в себя одни из лучших когда-либо созданных профилировщиков.Даже без специальной поддержки JRuby эти инструменты могут быть весьма полезны.Oracle JDK имеет этот чрезвычайно крутой VisualVM инструмент, который позволяет вам визуализировать все виды информации о вашей программе (и AFAIK есть даже плагин для JRuby).Oracle JRockit также имеет отличный профилировщик.По слухам, у Azul JVM есть совершенно потрясающий профилировщик.Я думаю, что у J9 тоже отличный.И, конечно же, есть YourKit .
Чарльз Оливер Наттер и другие члены сообщества JRuby недавно написали серию статей о понимании поведения Ruby-кода во время выполнения с использованием JRuby.В основном эти статьи были написаны как реакция на библиотеку memprof для MRI , и поэтому они, как правило, фокусируются на профилировании памяти, но там также есть кое-что о профилировании вызовов.
AFAIKодна из целей MacRuby состояла в том, чтобы использовать Ruby для понимания среды исполнения XCode (Instruments and Co.), но это скорее долгосрочная цель, я не знаю, реализовано ли это в настоящее время.
Вот небольшой пример от Рубиниуса:
rbx -Xprofile -e'
Hash.new {|fibs, n|
fibs[n] = if n < 2 then n else fibs[n-1] + fibs[n-2] end
}[100]
'
Что печатает:
Total running time: 0.009895000000000001s
% cumulative self self total
time seconds seconds calls ms/call ms/call name
------------------------------------------------------------
7.59 0.00 0.00 234 0.00 0.01 Hash#find_entry
5.86 0.00 0.00 419 0.00 0.00 Hash#key_index
5.49 0.00 0.00 275 0.00 0.00 Hash::Entry#match?
4.97 0.01 0.00 234 0.00 0.02 Hash#[]
Как вы можете видеть, одним интересным свойством профилировщика Рубиниуса является то, что он может профилироватьпроизвольный код Ruby, а сам Rubinius является в основном кодом Ruby, он может профилировать глубоко в самой системе.