如何使用 JMX 监控现有的 Java class?
How to Monitor an existing Java class with JMX?
我有一个现有的 Java class 如下,我想使用 JMX 监视此 class 中每个方法的方法调用次数。我该怎么做?我试过 google 但我看不到整个事情是如何连接的。如果我能看到一些代码示例就太好了
Public class RPCServer {
public void storeSchema() { // want to count number of method invocations
System.out.println("storeSchema");
}
public void getSchema() { // want to count number of method invocations
System.out.println("getSchema");
}
public void storeRow() { // want to count number of method invocations
System.out.println("storeRow");
}
public void getRow() { //want to count number of method invocations
System.out.println("getRow");
}
}
我想看看某些方法通过JMX执行了多少次,我提出这个方案
首先,您需要一个 class 的界面。仅此接口的方法对 JMX 可见:
public interface RPCServerInterface {
int countMethodInvocation(String method);
}
然后在 class 中存储每个函数被调用的次数。
public class RPCServer implements RPCServerInterface{
private int row;
private Map<String,Integer> countByMethod = new HashMap<String,Integer>();
// +1 to the number of time of execution of this method
private void sumMethodInvocation(String method) {
if ( countByMethod.containsKey(method) ) {
int n = countByMethod.get(method);
countByMethod.put(method, n+1);
} else {
countByMethod.put(method,1);
}
}
// how many time the method has been invoked
@Override
public int countMethodInvocation(String method){
return countByMethod.containsKey(method)?countByMethod.get(method):0;
}
public void setRow(int i) {
// register each time is executed
this.sumMethodInvocation("setRow");
this.row = i;
}
public int getRow() {
// register each time is executed
this.sumMethodInvocation("getRow");
return row;
}
}}
}
然后你必须注册你的Bean:
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
RPCServer rpcServer = new RPCServer();
ObjectName objectName = new ObjectName("org.foo.RPCServer.jmx:type=RPCServerInterface");
StandardMBean standardMBean = new StandardMBean(rpcServer,RPCServerInterface.class);
mBeanServer.registerMBean(standardMBean, objectName);
路径org.foo.RPCServer.jmx随意。
然后你的 运行 jconsole 和你找到你正在 运行ning 的进程。
然后你可以运行命令countMethodInvocation,你可以得到执行次数。
像这样:
本教程可能有用:
我有一个现有的 Java class 如下,我想使用 JMX 监视此 class 中每个方法的方法调用次数。我该怎么做?我试过 google 但我看不到整个事情是如何连接的。如果我能看到一些代码示例就太好了
Public class RPCServer {
public void storeSchema() { // want to count number of method invocations
System.out.println("storeSchema");
}
public void getSchema() { // want to count number of method invocations
System.out.println("getSchema");
}
public void storeRow() { // want to count number of method invocations
System.out.println("storeRow");
}
public void getRow() { //want to count number of method invocations
System.out.println("getRow");
}
}
我想看看某些方法通过JMX执行了多少次,我提出这个方案
首先,您需要一个 class 的界面。仅此接口的方法对 JMX 可见:
public interface RPCServerInterface {
int countMethodInvocation(String method);
}
然后在 class 中存储每个函数被调用的次数。
public class RPCServer implements RPCServerInterface{
private int row;
private Map<String,Integer> countByMethod = new HashMap<String,Integer>();
// +1 to the number of time of execution of this method
private void sumMethodInvocation(String method) {
if ( countByMethod.containsKey(method) ) {
int n = countByMethod.get(method);
countByMethod.put(method, n+1);
} else {
countByMethod.put(method,1);
}
}
// how many time the method has been invoked
@Override
public int countMethodInvocation(String method){
return countByMethod.containsKey(method)?countByMethod.get(method):0;
}
public void setRow(int i) {
// register each time is executed
this.sumMethodInvocation("setRow");
this.row = i;
}
public int getRow() {
// register each time is executed
this.sumMethodInvocation("getRow");
return row;
}
}}
}
然后你必须注册你的Bean:
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
RPCServer rpcServer = new RPCServer();
ObjectName objectName = new ObjectName("org.foo.RPCServer.jmx:type=RPCServerInterface");
StandardMBean standardMBean = new StandardMBean(rpcServer,RPCServerInterface.class);
mBeanServer.registerMBean(standardMBean, objectName);
路径org.foo.RPCServer.jmx随意。
然后你的 运行 jconsole 和你找到你正在 运行ning 的进程。
然后你可以运行命令countMethodInvocation,你可以得到执行次数。
像这样:
本教程可能有用: