Drawing Hands by M.C. Escher (1948)

Jeff Mesnil

Archive for the ‘jmx’ Category


jmx4r 0.0.4 is released

On August 7th, 2007 in java, jmx, jmx4r, jruby, ruby (No Comments »)

jmx4r 0.0.4 has just been released.
jmx4r is a JRuby library which makes it super easy to write simple Ruby scripts to manage Java applications using JMX.

To get this new release, just update the rubygem: jruby -S gem install jmx4r

All contributions to this new release were done by Skaar:

(more…)

Tomcat management using jmx4r

On July 5th, 2007 in java, jmx, jmx4r, jruby, ruby (No Comments »)

Something which is not obvious with the way jmx4r leverages JMX API and Ruby metaprogramming is that you can write simple scripts to manage a Java application without any dependency on the MBeans exposed by the application.

For simplicity, in my examples I always use MBeans exposed by the JVM but jmx4r works with any MBean even if its interface is unknown from the JVM running the management scripts.

Here is a simple example to manage Tomcat using jmx4r.

Let’s assume that we have Tomcat running locally and manageable remotely on port 3000 (without authentication):

$ export CATALINA_OPTS="-Dcom.sun.management.jmxremote \
    -Dcom.sun.management.jmxremote.port=3000 \
    -Dcom.sun.management.jmxremote.ssl=false \
    -Dcom.sun.management.jmxremote.authenticate=false"
$ ./bin/catalina.sh/run

We want to know among all the Web Modules running in Tomcat which ones are privileged and which ones are not. The whole script to do so is:

# tomcat_modules.rb
require "rubygems"
require "jmx4r"

JMX::MBean.establish_connection :host => "localhost", :port => 3000

web_modules = JMX::MBean.find_all_by_name "Catalina:j2eeType=WebModule,*"
privileged, unprivileged = web_modules.partition { |m| m.privileged }

puts "Privileged:\n"     + privileged.map   {|m| m.path }.join("\n  ")
puts "Unprivileged:\n  " + unprivileged.map {|m| m.path }.join("\n  ")

Executing this script gives:

$ jruby tomcat_modules.rb 
Privileged:
  /balancer
  /manager
  /host-manager
Unprivileged:
  /tomcat-docs
  /servlets-examples
  /jsp-examples

  /webdav

That’s were using JRuby shines: it combines the simplicity of using directly the MBeans exposed by a Java application without having to bother with classes dependency.

Using Java to write a corresponding script means choosing your “poison”:

I can not thank enough both the JMX and JRuby guys which make it so simple to get the best of both worlds in jmx4r:

jmx4r 0.0.3, documentation and multiple connections

On July 4th, 2007 in java, jmx, jmx4r, jruby, ruby (1 Comment »)

jmx4r 0.0.3 has just been released.
jmx4r is a JRuby library which makes it super easy to write simple Ruby scripts to manage Java applications using JMX.

Two new features in this release:

  1. some much-needed documentation
  2. as requested by Brian McCallister, I’ve modified the code so that it is now possible to write a script to manage many Java applications at the same time.

For example, the script to trigger a garbage collection on a cluster of Java applications at the same time (quite a bad idea but a simple one):

port = 1090
hosts = ["node1", "node2", "node3", "node4"]
hosts.each do |h|
    memory = JMX::MBean.find_by_name "java.lang:type=Memory", :host => h, :port => port
    memory.gc
end

Quite simple, isn’t it?

(more…)

Gem for jmx4r + authentication

On June 27th, 2007 in java, jmx, jmx4r, jruby, ruby (No Comments »)

jmx4r is a library for JRuby to make it super easy to write Ruby scripts to manage remote Java applications through JMX.

Thanks to RubyForge, installing jmx4r is now as simple as typing

jruby -S gem install jmx4r

and its use is straightforward

#!/usr/bin/env jruby
require 'rubygems'
require 'jmx4r'

# optional since by default, jmx4r tries to connect to 
# a JMX Server on localhost which listens to port 3000
JMX::MBean.establish_connection :host => "localhost", :port => 3000

memory = JMX::MBean.find_by_name "java.lang:type=Memory"
# trigger a Garbage Collection
memory.gc

Since my previous post on jmx4r, I’ve added unit tests and some examples to highlight its features. It still needs to be properly documented though…

However, one new feature is worth mentioning: jmx4r now supports connection authentication

JMX::MBean.establish_connection :host => "localhost",
    :username => "jeff", :password => "secret"

If you’re using it, I’m very interested to now what you think about it.
And if you encounter any problem, do not hesitate to submit a bug.

jmx4r, a JMX Libary for JRuby

On June 11th, 2007 in java, jmx, jmx4r, jruby, ruby (2 Comments »)

Just in time for the release of JRuby 1.0 and following my experiments with writing JRuby scripts to manage remote applications using JMX (part I & II), I created jmx4r, a simple library which makes it super easy to write such scripts.

For example, to trigger a Garbage Collection on a remote Java application , the whole script is:

require 'java'
require 'jmx4r'

memory = JMX::MBean.find_by_name "java.lang:type=Memory"
memory.verbose = true
memory.gc

Simple enough, isn’t it?

(more…)