From: Vivek Vaid Date: 2011-04-01T06:01:01+09:00 Subject: Monitoring --e0cb4e3853d80a1b90049fcd973f Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Charles - Any insights into jxinsight vs new relic? 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. On Sat, Dec 4, 2010 at 7:26 PM, Charles Oliver Nutter wrote: > On Fri, Nov 19, 2010 at 5:56 PM, Joel VanderWerf > wrote: > > I'm looking at the output from both --profile and --sample. It seems th= at > > --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 mo= re > > 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=3D1 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=3Dtimes): > > =E2=9E=94 jruby -J-Xrunhprof:cpu=3Dtimes -e "def foo; a =3D 0; while a < = 1000; a > +=3D 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 > > --e0cb4e3853d80a1b90049fcd973f--