TOTD #63: jmx4r gem - How to manage/monitor your Rails/Merb applications on JRuby/GlassFish ?
Posted by arungupta on January 13, 2009 at 1:54 PM EST
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 ?
Technorati: totd glassfish jruby rubyonrails merb jmx jmx4r manage monitor
Related Topics >>
Blog Links >>
- Login or register to post comments
- Printer-friendly version
- arungupta's blog
- 769 reads





