3. 监控本机程序
这种场景在实际中不太常用,对于本机的程序来说,需要监控,按需调用被托管的类方法还真不多。
相当于丈夫就在你面前,他的一举一动都在你眼皮底下,你还需要一个Android小程序去监控他吗?笔者使用的是Spring3的实现。所以先将Spring的包下载下来,放到项目的classpath中。
咱们先写一个最普通的JavaBean
Java代码
package jmx;
public class HusbandLocal {
// 属性
private String name;
private int age;
private String message;
// set,get
public String getName() {
System.out.println("name:"+name);
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
System.out.println("age:"+age);
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getMessage() {
System.out.println("message:"+message);
return message;
}
public void setMessage(String message) {
this.message = message;
}
// 额外的操作,方法
public void call(String message) {
System.out.println("丈夫的call:" + message);
}
public void look(){
System.out.println("发现发廊");
}
public void playDOTA(){
System.out.println("这个不用解释了吧~DOTA");
}
}
以上Bean我们将它像Web Service一样(但是不是啊)暴露成JMX托管服务类。配置Spring文件内容如下
Java代码
< xml version="1.0" encoding="UTF-8" >
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
org.springframework.jmx.export.MBeanExporter是Spring暴露管理Bean(MBean)的核心类之一。它使用一个Map类型的属性——beans记录要暴露MBean的类。将咱们刚刚写的HusbandLocal以属性注入的方式注入进去。之后写一个加载Spring文件的main实例,开启服务。
Java代码
// 加载配置文件
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
"applicationContext.xml");
// 通过死循环保证主线程一直运行
while (true) {
}
点击进去后可以查看咱们刚才暴露的MBean,如下

我们可以点击MBean的操作,比如playDOTA(),后台就调用了该方法。在这个界面还可以看到MBean的属性值,你叫他们状态也行。
如此,我们完成了一个本地监控MBean对象的小功能。不过就像原来说的,这有个问题就是咱们之前说的,这种本地场景不多见,不常用。Ok,咱们看看要想远程监控需要做些什么事情。
4. 监控远程程序
下面我们尝试在远程监控咱们这个“丈夫”。
首先在Spring配置文件增加以下内容
Java代码
刚才我们将我们的MBean注册到一个基于RMI访问方式的连接服务上(ConnectorServerFactoryBean),占用的端口是8080。这时启用jconsole以远程方式连接,不用输入密码,如下图所示

之后和在本地操作一样,可以监控MBean的属性状态,也可以进行相应的操作。
5. 监控Web容器
如果我们要监控一下Web服务器,比如Tomcat服务器的JVM状态怎么办?这种场景非常的常见。其实配置也很简单。我们打开{Tomcat_HOME}/bin/catalina.bat,在linux下是{Tomcat_HOME}/bin/catalina.sh文件。将原有的脚本
Java代码
set LOGGING_MANAGER=-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
替换成为
Java代码
rem 配置JMX服务端口
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.port=10090 -Dcom.sun.management.jmx