之前写了JConsole、VisualVM 依赖的 JMX 技术,然后放出了一个用纯 JMX 实现的 web 版本的 JConsole 的截图,今天源码来了。

本来就是为了更多的了解 JMX,第一步就想把所有的 MBean 和属性都展示出来,开始在控制台输出,但是效果不好,内容太多太长,不够直观,然后就加了个 web 端的树形结构。然后做着做着突然发现,再稍微改改就能当个 web 版的简易监控端用了。

此工具只在 hotspot JVM 8 环境下测试过。可支持查看本地 JVM 和 远程 JVM 实时监控。

前端采用 React 16 + Antd + Yarn ,后端 Spring Boot + Java 1.8。具体使用方式可以到 github 仓库 README 页面查看。并且提供了一个在线预览版本,文末有源码地址和在线版本的使用方式

支持本地 JVM 和远程 JVM 链接。


所有 MBean 的树形展示以及属性、操作的展示。


JVM 运行情况实时展示

实现的功能有如下几个方面:

1.所有 MBean 的展示;

2.系统信息的展示,包括内存使用、CPU 使用率等等;

3.JVM 参数,包括命令行参数和 systemProperties;

4.CPU 、Heap、Metaspace、类加载、线程的实时折线图;

5.垃圾收集器的种类和回收次数;

下面结合这几部分,说一下 JMX 的使用方式。

MBean 的获取

正如各种工具里的 MBean 的树形展示方式一样, MBean 本身就是以这种层级关系存在的。

MBean 包含在 Domain 里,Domain 相当于是一套独立的空间,这个空间里可以定义各种 type,各种 name 的 ObjectName。比如前一篇 JMX 文章里自定义的那个。

通过 ObjectName 可以获取到 MBean 的各种信息,包括属性、操作、通知。

有些属性是简单数据类型,比如 int、long、double、String 类型,另外有些是比较复杂的,比方说 com.sun.management:type=HotSpotDiagnostic 的属性 DiagnosticOptions 就是 javax.management.openmbean.CompositeData 类型。还有的属性的数据类型是 javax.management.openmbean.TabularData。这些都要单独处理。

常用的 MBean

有些指标是监控会用到的,比如内存、CPU、堆空间、线程、类加载情况相关的 MBean。

JDK 提供了一个 ManagementFactory,帮助我们方便的获取常用的 MBean。可以到 java.lang.management 包下找到这个类看一下注释和代码。

OperatingSystemMXBean

可以获取操作系统相关的信息,机器名称、内存使用、CPU使用等信息。

可通过 ManagementFactory.getOperatingSystemMXBean() 方式获取。

RuntimeMXBean

可以获取当前 JVM 的信息,包括 JVM 参数和 JVM 相关的系统参数。

可以通过 ManagementFactory.getRuntimeMXBean()方式获取。

MemoryMXBean

可以获取当前 JVM 的内存使用,包括堆内存和非堆内存。

可以通过 ManagementFactory.getMemoryMXBean()获取

ThreadMXBean

获取 JVM 线程使用情况,包括活动线程、守护线程、线程峰值等。

可以通过 ManagementFactory.getThreadMXBean() 获取。

ClassLoadingMXBean

获取 JVM 类加载情况,包括已加载类、未加载类等。

可以通过 ManagementFactory.getClassLoadingMXBean() 获取。

GarbageCollectorMXBean

获取 JVM 垃圾收集器的情况,包括使用的哪种垃圾收集器以及回收次数等等。

可以通过 ManagementFactory.getGarbageCollectorMXBeans() 获取,注意,这里获取到的是一个集合,因为垃圾收集器分为老年代和新生代两个。

除了以上几个常用的 MBean ,还有很多其他的。有些在 ManagementFactory 类里已提供了,另外还有很多需要自己通过 ObjectName 获取。

在线体验

我在服务器上部署了一个体验版本。因为服务器配置实在惨的可怜,所以需要在本公众号内回复「jmx」获取体验验证码和在线地址。
公众号:「古时的风筝」或者扫描文末的二维码

源码地址

源码放到了 github 上,地址为 https://github.com/huzhicheng/little-flower, README 上有具体的使用方式。因为各个操作系统下的 JVM 也是不一样的,windows、Mac、Linux 也是不能通用的,所以,没有提供可用的 release jar 包。比如我开发用的 Mac 和体验环境 Linux 系统就是不一样的,需要单独编译。在使用的时候,需要下载源码,在本地编译,然后运行。

有兴趣的不妨试用一下,欢迎拍砖。

不要吝惜你的「推荐」呦

欢迎关注,不定期更新本系列和其他文章
古时的风筝 ,进入公众号可以加入交流群

无意间做了个 web 版的 JVM 监控端(前后端分离 React+Spring Boot)的更多相关文章

  1. List多个字段标识过滤 IIS发布.net core mvc web站点 ASP.NET Core 实战:构建带有版本控制的 API 接口 ASP.NET Core 实战:使用 ASP.NET Core Web API 和 Vue.js 搭建前后端分离项目 Using AutoFac

    List多个字段标识过滤 class Program{  public static void Main(string[] args) { List<T> list = new List& ...

  2. ASP.NET Core 实战:使用 ASP.NET Core Web API 和 Vue.js 搭建前后端分离项目

    一.前言 这几年前端的发展速度就像坐上了火箭,各种的框架一个接一个的出现,需要学习的东西越来越多,分工也越来越细,作为一个 .NET Web 程序猿,多了解了解行业的发展,让自己扩展出新的技能树,对自 ...

  3. web 部署专题(九):Nginx 前后端分离中csrf_token 认证的实现

    1. 思路 参考:https://stackoverflow.com/questions/20826201/simple-csrf-protection-using-nginx-alone?r=Sea ...

  4. 【转】Web实现前后端分离,前后端解耦

    一.前言 ”前后端分离“已经成为互联网项目开发的业界标杆,通过Tomcat+Ngnix(也可以中间有个Node.js),有效地进行解耦.并且前后端分离会为以后的大型分布式架构.弹性计算架构.微服务架构 ...

  5. 前后端分离架构:Web实现前后端分离,前后端解耦

    一.前言 ”前后端分离“已经成为互联网项目开发的业界标杆,通过Tomcat+Ngnix(也可以中间有个Node.js),有效地进行解耦.并且前后端分离会为以后的大型分布式架构.弹性计算架构.微服务架构 ...

  6. Web实现前后端分离,前后端解耦

    一.前言 ”前后端分离“已经成为互联网项目开发的业界标杆,通过Tomcat+Ngnix(也可以中间有个Node.js),有效地进行解耦.并且前后端分离会为以后的大型分布式架构.弹性计算架构.微服务架构 ...

  7. 【转】前后端分离架构:web实现前后端分离,前后端解耦

    一.前言 ”前后端分离“已经成为互联网项目开发的业界标杆,通过Tomcat+Ngnix(也可以中间有个Node.js),有效地进行解耦.并且前后端分离会为以后的大型分布式架构.弹性计算架构.微服务架构 ...

  8. 浅谈Web前后端分离的意义

    自然是有很大意义的.下面我可能说的比较多--方便题主能够更全面的了解为什么说是有有意义的.另外,本文是以Java的角度谈前后端分离.放心,大家一定会有种是我了,没错,的感觉. 一.先来明晰下概念 前后 ...

  9. 浅谈WEB前后端分离

    重审业务逻辑 用过MVC的童鞋都知道业务逻辑(Bussiness Logic),但是大多对这概念又是模棱两可,业务逻辑从来都是这样难以理解,谈论前后端分离之前这个概念非常有必要探讨一下! 在简单的CR ...

随机推荐

  1. gitlab版本管理小白入门

    在新公司入职已经一周了,由于刚好在版本空档期,没有什么开发任务,就自己熟悉熟悉代码什么的. 目前公司用的是git,原来公司用的是svn,今天就记录下从小白入门. gitlab分布式版本管理,理论介绍就 ...

  2. Failed to execute goal on project e3-manager: Could not resolve dependencies for project cn.e3mall:e3-manager:pom:0.0.1-SNAPSHOT: Could not find artifact cn.e3mall:e3-parent:jar:0.0.1-SNAPSHOT

    新建好工程后一定要记得从底层开始clean和install 在启动新建的工程时到最后一步出现了这个问题: Failed to execute goal on project e3-manager-we ...

  3. go 学习笔记之学习函数式编程前不要忘了函数基础

    在编程世界中向来就没有一家独大的编程风格,至少目前还是百家争鸣的春秋战国,除了众所周知的面向对象编程还有日渐流行的函数式编程,当然这也是本系列文章的重点. 越来越多的主流语言在设计的时候几乎无一例外都 ...

  4. 阿里云 centos7 64位搭建JAVA环境-----安装mysql(1)

    一开始用的是阿里云镜像市场的JAVA集成环境,但是配置了好长时间配置不成功.索性就换成了纯净系统从零开始搭建JAVA环境. 镜像:centos_7_04_64_20G_alibase_20170101 ...

  5. 纯纯的css画美美的彩虹

    效果 效果图如下 ​ 实现思路 使用box-shadow画赤橙黄绿蓝靛紫7个弧形,拼接在一起 after伪元素写投影样式 彩虹和投影都有动画 dom结构 用两个嵌套的div容器,父容器来控制图标显示的 ...

  6. 反射的应用、获取Class类实例

    *准备工作: 包结构:* ======================= Person.java代码: package com.atguigu.java; public class Person { ...

  7. AsyncLocal和Async原理解读

    AsyncLocal 的实现很简单,将AsyncLocal实例和当前线程的值以键值对的形式保存在Thread.CurrentThread.ExecutionContext.m_localValues. ...

  8. C. Anadi and Domino

    题目链接:http://codeforces.com/contest/1230/problem/C C. Anadi and Domino time limit per test: 2 seconds ...

  9. activity的隐式和显式启动

    显式Intent(Explicit intent):通过指定Intent组件名称来实现的,它一般用在知道目标组件名称的前提下,一般是在相同的应用程序内部实现的. 隐式Intent(Implicit i ...

  10. elasticsearch 增删改查底层原理

    elasticsearch专栏:https://www.cnblogs.com/hello-shf/category/1550315.html 一.预备知识 在对document的curd进行深度分析 ...