Miles to go …

January 9, 2009

TOTD #63: jmx4r gem – How to manage/monitor your Rails/Merb applications on JRuby/GlassFish ?

Filed under: web2.0 — arungupta @ 5:00 am

TOTD #61 and TOTD #62 shows how to use JMX APIs to locally/remotely manage/monitor your Rails/Merb applications. This Tip Of The Day extends TOTD #62 and shows how remote management can be done using jmx4r gem.

This gem provides a clean mapping between JMX APIs and Ruby. It allows to write pure Ruby code to manage/monitor any Rails application. As a result it removes all dependency on the Java code used in TOTD #62.

Lets first install the gem!

~ >gem install jmx4r
JRuby limited openssl loaded. gem install jruby-openssl for full support.
http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL
Successfully installed jmx4r-0.0.6
1 gem installed
Installing ri documentation for jmx4r-0.0.6…
Installing RDoc documentation for jmx4r-0.0.6…

Here is the equivalent Ruby code to flush the class cache (as in TOTD #62):

require ‘rubygems’
require ‘jmx4r’

JMX::MBean.establish_connection :host => “129.145.133.163″, :port => 8686

beans = JMX::MBean.find_all_by_name “org.jruby:*”
beans.each { |bean|
  service = bean.object_name["service"]
  case service
  when “ClassCache”
    @cc_mbean = bean
  when “Config”
    @c_mbean = bean
  end
}

# clear the cache if it’s full
if @cc_mbean.full
  printf “JIT Max: %d, JIT Threshold: %d, Class load count: %d\n”, @c_mbean.jit_max,
    @c_mbean.jit_threshold, @cc_mbean.class_load_count
    @cc_mbean.flush
else
  puts “Class Cache is not full”
  printf “Loaded: %d, Reused: %d, Live: %d\n”, @cc_mbean.class_load_count,
    @cc_mbean.class_reuse_count, @cc_mbean.live_class_count
end

As with all Ruby code, really clean and simple!

The key parts of the code are highlighted in bold. “JMX::MBean.establish_connection” establishes a connection with a JMX agent running on a remote machine identified by the IP address and port number specified. “JMX::MBean.find_all_by_name” queries the agent for all the MBeans in “org.jruby” domain. And then the code is self explanatory.

Just dump this code in a file and run it as:

jruby main.rb

to see the output similar to:

Class Cache is not full
Loaded: 76, Reused: 0, Live: 76

Make sure Rails/Merb application is running after setting JAVA_OPTS as described in TOTD #62. For this blog, the JMX agent/Rails application ran on a Mac and the JMX client on a Solaris box.

The jmxr examples provides some more ways to use the gem.

There is also jmx gem that provides similar functionality. It even allows to create MBeans and provides a simple server where they can be registered. Tom’s blog provide more details on usage and there is even a sample included.

Subsequent blogs in this series will discuss:

  • How to remotely manage your Rails/Merb applications using JMX API ?
  • How to publish your own metrics that can be managed using JMX API ?
  • How to use jmx gem to manage/monitor ?
  • How to use VisualVM to get more information about the underlying VM ?
  • How to use NewRelic/FiveRuns to manage/monitor an application ?

Please leave suggestions on other TOTD (Tip Of The Day) that you’d like to see. A complete archive of all tips is available here.

Technorati: totd glassfish jruby rubyonrails merb jmx jmx4r manage monitor

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • DZone
  • email
  • StumbleUpon
  • Technorati
  • Twitter
  • Slashdot
Related posts:
  1. TOTD #62: How to remotely manage/monitor your Rails/Merb applications on JRuby/GlassFish using JMX API ?
  2. TOTD #61: How to locally manage/monitor your Rails/Merb applications on JRuby/GlassFish using JMX ?
  3. TOTD #11: Setup Mongrel cluster for JRuby-on-Rails applications on Unix
  4. TOTD #13: Setup Mongrel for JRuby-on-Rails applications on Windows
  5. TOTD #79: Getting Started with Sinatra applications on JRuby and GlassFish Gem

4 Comments »

  1. I prefer local management, I always build my systems without remote management. A security issue, otherwise. :( :)

    Comment by Mark — January 10, 2009 @ 5:20 pm

  2. [Trackback] Here is a blog entry that was sitting in my Drafts folder for a long time (just because I didn’t realize :) . Anyway, it shows how to install Open Solaris 2008/11 on Virtual Box. The original install was done using…

    Comment by Arun Gupta's Blog — January 13, 2009 @ 10:56 am

  3. Nice, thanks Arun.

    I’m still trying to figure out self-management on Glassfish (i.e. installing your own MBeans to fire off when values go outside thresholds). That would avoid the massive pains involved in getting JMX through a firewall.

    I’m sure that should be doable with JRuby too, but think that’d be trying to run before I can walk :)

    Comment by Dick Davies — January 19, 2009 @ 4:18 am

  4. thank u arun gupta

    Comment by sinema izle — March 10, 2009 @ 2:04 pm

RSS feed for comments on this post. TrackBack URL

Leave a comment

The views expressed on this blog are my own and do not necessarily reflect the views of Oracle.
Powered by WordPress