想监控JVM,可是不知道从哪下手!

简介: 在开发中经常需要监控应用的运行情况,包括内存,cpu ,gc ,线程等信息,这些东西jdk提供的工具很多都有,如果我们自己想实现一些自己的管理,怎么样才能获得这些信息呐?今天一起来看一下这一切的起点——Jmx。

在开发中经常需要监控应用的运行情况,包括内存,cpu ,gc ,线程等信息,这些东西jdk提供的工具很多都有,如果我们自己想实现一些自己的管理,怎么样才能获得这些信息呐?今天一起来看一下这一切的起点——Jmx。


1、jmx是什么?


JMX —Java Management Extensions,翻译过来就是java 的管理扩展,是jvm 提供的一套监控的框架。为程序进行监控提供了统一的接口,让你不用写JNI,一样可以监控JVM内的资源使用情况。


2、官方提供了哪些?


mxbean 官方提供了一些常用的,如下面两张图,基本上看名字就能分辨出来,能提供jvm的哪些信息。

c9dc16a9012e41e2a7eaa9ec8c07f283~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg

 

这么多都有什么用?


17056512a7d149dd9a853eaf78e56a20~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg

3、实现自己的标准mbean


上面这么多是怎么实现的呐?show me the fuck code。


1.定义mbean 接口


/**
* 香菜聊游戏
*/
public interface PlayerMgrMBean {
  public void setName(String newName);
  public String getName();
  public void helloPlayer(String worldStr);
}
复制代码


2.实现接口


/**
* 香菜聊游戏
*/
public class PlayerMgr implements PlayerMgrMBean {
  private String name ;
  @Override
  public String getName() {
      return name;
  }
  @Override
  public void setName(String newName) {
      this.name = newName;
  }
  @Override
  public void helloPlayer(String worldStr) {
      System.out.println(name + " " + worldStr);
  }
}
复制代码


3.注册mbean


/**
* 香菜聊游戏
*/
  public static void main(String[] args) throws Exception {
      MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
      ObjectName name = new ObjectName( "corg.pdool.jmx:type=playerMgr" );
      mBeanServer.registerMBean(new PlayerMgr(), name);
      System.out.println("注册完毕");
      Thread.sleep(24*60*60*1000);
  }
复制代码


4.观测mbean。


打开 C:\Program Files\Java\jdk1.8.0_121\bin\jconsole.exe,选择你运行的app,然后双击打开,进行连接,读取数据。

3ecb2e5ac6a34628b16128fc4a00885f~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg

根据自己注册的名字,打开自己注册的mbean,比如我代码中注册的名字是“corg.pdool.jmx”。

5a439f9b4fa341f08887c31878fdd9aa~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg


属性对应了 get/set 方法,下方展示了方法的属性和方法签名信息。


b9d83a40a7d34484879f325f656cba08~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg


helloPlayer 对应了暴露的接口方法,p1 表示可以传入的参数是String,可直接修改,如果传入“你好”,然后点击helloPlayer 按钮,后台就会输出打印信息。

c17ca6b5f263469695cd43fad4208d9a~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg

4、应用场景


技术的存在必然是有应用的场景,使用jmx的有哪些有名的应用呐?比如arthas,中间件软件WebLogic的管理页面就是基于JMX开发的,而JBoss则整个系统都基于JMX构架。


5、总结


mbean 说白了就是应用内启动了MBeanServer,用户根据自己的需求注册,然后在运行时进行客户端连接,获取信息,标准的CS结构,只不过规则不同而已,遵守接口规则,并没有什么特别的东西,节省了定制 JNI 的时间,仅此而已。系统提供的这些已经可以实现了大部分的监控需求,如果你想定制,只要记得接口规则,至于内容就自由发挥吧。你学会了吗?

目录
相关文章
|
21天前
|
Arthas 监控 数据可视化
JVM进阶调优系列(7)JVM调优监控必备命令、工具集合|实用干货
本文介绍了JVM调优监控命令及其应用,包括JDK自带工具如jps、jinfo、jstat、jstack、jmap、jhat等,以及第三方工具如Arthas、GCeasy、MAT、GCViewer等。通过这些工具,可以有效监控和优化JVM性能,解决内存泄漏、线程死锁等问题,提高系统稳定性。文章还提供了详细的命令示例和应用场景,帮助读者更好地理解和使用这些工具。
|
4月前
|
存储 消息中间件 监控
JVM内存问题之ARMS监控显示堆内存和我设置的不同如何解决
JVM内存问题之ARMS监控显示堆内存和我设置的不同如何解决
|
4月前
|
缓存 Prometheus 监控
Java面试题:如何监控和优化JVM的内存使用?详细讲解内存调优的几种方法
Java面试题:如何监控和优化JVM的内存使用?详细讲解内存调优的几种方法
92 3
|
5月前
|
JSON 监控 Java
编写电脑监控软件的Groovy脚本:JVM生态系统的整合与扩展
使用Groovy编写脚本监控Java虚拟机(JVM)的健康状况,包括内存使用和CPU利用率。脚本可自动将数据提交至指定网站,确保及时发现系统问题,防止服务中断。通过结合Runtime和OperatingSystemMXBean类获取系统信息,利用Groovy的HTTP客户端库POST数据到监控网站,实现高效稳定的系统监控。
128 0
|
6月前
|
监控 Ubuntu Java
Java VisualVM远程监控JVM
Java VisualVM远程监控JVM
Java VisualVM远程监控JVM
|
6月前
|
Prometheus 监控 Cloud Native
JVM工作原理与实战(三十三):监控GC过程的工具
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了jstat工具、VisualVM插件、Prometheus + Grafana、GC日志等内容。
226 0
|
6月前
|
Arthas Prometheus 监控
JVM工作原理与实战(二十九):监控内存泄漏的工具
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了解决内存溢出的步骤、Top命令、VisualVM、Arthas、Prometheus + Grafana等内容。
399 0
|
6月前
|
Arthas 监控 Java
金石原创 |【JVM实战系列】「监控调优体系」实战开发arthas-spring-boot-starter监控你的微服务是否健康!
金石原创 |【JVM实战系列】「监控调优体系」实战开发arthas-spring-boot-starter监控你的微服务是否健康!
91 0
|
6月前
|
存储 监控 Java
JVM监控和分析技术在实践中可能会面临什么?
JVM监控和分析技术在实践中可能会面临什么?
|
6月前
|
监控 数据可视化 Java
VisualVM【实践 02】远程JVM监控的JMX配置及No supported for this JVM问题处理(Jstatd报错踩坑不计其数)
VisualVM【实践 02】远程JVM监控的JMX配置及No supported for this JVM问题处理(Jstatd报错踩坑不计其数)
378 0