On Fri, Nov 19, 2010 at 5:56 PM, Joel VanderWerf <joelvanderwerf / gmail.com> wrote: > I'm looking at the output from both --profile and --sample. It seems that > --profile measures only jruby methods, and --sample measures only java > functions. (Or maybe --sample would show some of the jruby methods if they > were taking enough time to be observed at a tick. My program is much more > heavily bottlenecked in the java side at the moment.) > > Is there any possibility of --profile instrumenting both jruby and java > code? Currently, no. Because Ruby dispatches differently than Java, including both in the same profile is at least difficult, and maybe impossible. Liken it to wanting to show profile results for both Ruby and C (or C++, C#, ObjC) in other implementations, when Ruby method dispatch is actually implemented *in* those native languages. The two worlds are largely separate. However... If you are able to force all Ruby code to compile before invocation (using -X+C to force all files to compile or -Xjit.threshold=1 to force all methods to compile on first invocation) normal Java profiling tools will show the compiled Ruby method bodies alongside regular Java method bodies. Be forewarned, however...as with any C or C++-based implementation that JITs Ruby code to native code, the resulting method are "mangled" a bit, and you'll have to do some manual chewing to interpret them. But at least you can use any of the dozens of Java profiling tools and show results for both Ruby and Java at the same time. If there's interest, I could try to do a screencast of how to do this with various JVM profilers (such as the built-in -J-Xrunhprof:cpu=times): jruby -J-Xrunhprof:cpu=times -e "def foo; a = 0; while a < 1000; a += 1; end; end; 100.times { foo }" Dumping CPU usage by timing methods ... done. Result, buried in a java.hprof.txt file: https://gist.github.com/728666 Here, the "ruby.__dash_e__.method__0$RUBY$foo" method is the jitted version of the "foo" method defined above. Now, on JRuby 1.6, it may be possible to take this mangled output and at least do a cleanup pass (because we have standardized the mangling a bit better), but the profiling output is very tool-specific...so de-mangling would have to happen on a per-tool basis Another option would be the JXInsight tool (http://www.jinspired.com/products/jxinsight/), which has builtin support for profiling Ruby (and may make it possible to combine Ruby and Java results in the same output. It is, however, a commercial tool. - Charlie