如何使用JMX监视现有的Java类?

用户名

我有一个如下的现有Java类,并且我想使用JMX监视此类中每个方法的方法调用数。我该怎么做?我尝试了谷歌,但我看不到整个事情如何联系的大局。如果能看到一些代码示例,那将是非常不错的

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");
   }

} 
Truncador

我想看看通过JMX执行某些方法有多少次,我提出了这种解决方案

首先,您需要一个用于类的接口。对于JMX,仅此接口的方法可见:

public interface RPCServerInterface {
  int countMethodInvocation(String method);
}

然后在该类中,存储每个函数被调用多少次。

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并找到正在运行的进程。

jconsole选择流程

然后,您可以运行命令countMethodInvocation并获取执行时间。

像这样:

运行程序jconsole

本教程可能会有用:

jmx-mbean-jconsole教程是什么

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在现有的 Java 类上使用 kotlin 实现 Parcelable

来自分类Dev

Java覆盖现有的类方法

来自分类Dev

使用直接Lua,如何公开现有的C ++类objec以在Lua脚本中使用?

来自分类Dev

如何为新的面板类重复使用现有的布局代码?

来自分类Dev

如何正确接口现有的密封类?

来自分类Dev

如何从库中覆盖现有的核心类?

来自分类Dev

如何正确接口现有的密封类?

来自分类Dev

如何在Typescript中扩展现有的类

来自分类Dev

如何扩展现有的 PHP 日历类

来自分类Dev

automapper概要文件类使用现有的映射定义

来自分类Dev

如何将监视模块添加到现有的Android Studio项目中?

来自分类Dev

如何在现有的虚拟机中创建虚拟监视器

来自分类Dev

如何使用任何Java库使现有的PDF文本可搜索?带OCR

来自分类Dev

如何在Jmeter中使用现有的Java API测试

来自分类Dev

如何使用Java设置现有的Excel文件数据格式'文本'

来自分类Dev

MongoDB MMS监视和备份现有的mongo实例

来自分类Dev

MongoDB MMS监视和备份现有的mongo实例

来自分类Dev

如何为现有的Java组件添加新功能?

来自分类Dev

如何在Java中修改现有的jsonobject

来自分类Dev

如何从现有的protobuf文件创建Java pojo?

来自分类Dev

如何为现有的ruby项目创建Java接口

来自分类Dev

如何为现有的Java组件添加新功能?

来自分类Dev

如何使用 C 语言的 openLDAP 库 API 以编程方式修改现有的 Open LDAP 对象类?

来自分类Dev

使用cmd运行现有的Java程序

来自分类Dev

将我现有的 java 类转换为片段 java 类

来自分类Dev

如何在Dockerfile中使用现有的Docker Volume

来自分类Dev

如何使用现有的fork更新我的github库?

来自分类Dev

如何使用Eclipse打开现有的C ++项目?

来自分类Dev

如何快速使用现有的SQLite数据库?

Related 相关文章

  1. 1

    在现有的 Java 类上使用 kotlin 实现 Parcelable

  2. 2

    Java覆盖现有的类方法

  3. 3

    使用直接Lua,如何公开现有的C ++类objec以在Lua脚本中使用?

  4. 4

    如何为新的面板类重复使用现有的布局代码?

  5. 5

    如何正确接口现有的密封类?

  6. 6

    如何从库中覆盖现有的核心类?

  7. 7

    如何正确接口现有的密封类?

  8. 8

    如何在Typescript中扩展现有的类

  9. 9

    如何扩展现有的 PHP 日历类

  10. 10

    automapper概要文件类使用现有的映射定义

  11. 11

    如何将监视模块添加到现有的Android Studio项目中?

  12. 12

    如何在现有的虚拟机中创建虚拟监视器

  13. 13

    如何使用任何Java库使现有的PDF文本可搜索?带OCR

  14. 14

    如何在Jmeter中使用现有的Java API测试

  15. 15

    如何使用Java设置现有的Excel文件数据格式'文本'

  16. 16

    MongoDB MMS监视和备份现有的mongo实例

  17. 17

    MongoDB MMS监视和备份现有的mongo实例

  18. 18

    如何为现有的Java组件添加新功能?

  19. 19

    如何在Java中修改现有的jsonobject

  20. 20

    如何从现有的protobuf文件创建Java pojo?

  21. 21

    如何为现有的ruby项目创建Java接口

  22. 22

    如何为现有的Java组件添加新功能?

  23. 23

    如何使用 C 语言的 openLDAP 库 API 以编程方式修改现有的 Open LDAP 对象类?

  24. 24

    使用cmd运行现有的Java程序

  25. 25

    将我现有的 java 类转换为片段 java 类

  26. 26

    如何在Dockerfile中使用现有的Docker Volume

  27. 27

    如何使用现有的fork更新我的github库?

  28. 28

    如何使用Eclipse打开现有的C ++项目?

  29. 29

    如何快速使用现有的SQLite数据库?

热门标签

归档