2024年9月java监控技术(jmx监控java调用)

 更新时间:2024-09-21 08:35:38

  ⑴java监控技术(jmx监控java调用)

  ⑵本文主要介绍java监控技术(jmx监控java调用),下面一起看看java监控技术(jmx监控java调用)相关资讯。

  ⑶再喜欢,动力无限。h:)搜索"程阿郎"。

  ⑷本文已被Github./niumoo/JavaNot

  ⑸Arthas-解决Java在线问题的终极武器。使用JMH测试Java测试Java中的监控和管理原则概述。使用JMX监控和管理Java程序。什么是JMX?Java管理扩展(JavaManagementExtensions,JMX)技术是JavaSE平台的一个标准功能,它提供了一种简单、标准的来监控和管理资源,并为如何定义一个资源给出了清晰的结构和设计模式,主要用于监控和管理Java应用程序的运行状态、设备和资源信息,以及Java虚拟机的运行情况。JMX可以是动态的,因此在创建、安装和实现资源时,也可以对其进行动态监控和管理。JDK附带的jconsole是由JMX技术公司实现的监控工具。

  ⑹使用JMX技术时,可以定义一个名为MBean或MXBean的Java对象来表示要管理指定的资源,然后可以向MBeanServer注册资源信息,对外提供服务。MBeanServer充当代理,对外提供服务,对内管理MBean资源。这样优雅的设计使得MBean资源管理和MBean服务器代理完全独立,从而可以自由控制MBean资源信息。

  ⑺JMX不仅用于本地管理,JMX远程API为JMX增加了远程功能,使其能够通过网络远程监控和管理应用程序。

  ⑻为什么使用JMX技术?JMX技术为Java开发人员提供了一种简单、灵活和标准的方法来监控Java应用程序。由于相对独立的架构设计,JMX可以顺利集成到各种监控系统中。

  ⑼以下是JMX的一些具体优势:

  ⑽开箱即用的监控功能,JMX是JavaSE的标准部分。提供资源管理、服务托管、远程监控等基本管理功能,可以直接启用。JMX技术提供了资源、系统、应用程序和网络的通用和标准管理模式,不仅可以在本地使用,还可以远程使用。还可以扩展到其他场景,比如JavaEE应用。JMX技术提供了JVM状态的监控功能。JMX内置了JVM的监控功能,可以监控和管理JVM,非常方便。JMX建筑设计优秀,组件设计可以自由扩展。JMX技术严格遵守现有的Java规范,如JNDI规范。JMX可以与其他管理解决方案自由集成。多亏了开放的JMXAPI,JMX的资源可以通过网络服务来管理。.JMX技术架构JMX技术架构主要由资源管理模块(MBean/MXBean)、资源代理模块(MBeanServer)和远程管理模块(RemoteAPI)组成。下图来自维基百科,很好的展示了三个模块之间的关系。

  ⑾资源管理MBean资源管理被标识为体系结构中的资源探测级别。在JMX中,用MBean或MXBean来表示一个资源(以下简称MBean),资源也是通过MBean来访问和管理的,所以MBean中往往包含了资源的属性和操作方法。

  ⑿JMX对JVM进行了多维度的资源检测,很容易启动JMX代理访问内置的JVM资源检测,从而通过JMX技术远程监控和管理JVM。

  ⒀下面列出了JMX;的资源检测类的JVM,所有这些都可以直接使用。

  ⒁资源接口ClassLoadingMXBean类管理的资源对象NameVM中的实例数loadsJava.lang:type=classloadingpilationmxbeanassemblysystemJava.lang:type=pilationio。垃圾收集器MXB:type=垃圾收集器,Name=收集器名称或多个日志MXbean日志系统Java.util.logging:type=loggingMemoryManagerMXBean内存池Java.langeCHO-.typ:type=memorypool,Name=poolName或多个MemoryMXBean内存系统Java.lang:type=memoryOperatingSystemMXBean操作系统Java.lang:type=operatingsystemruntimemxb。Ean运行时系统Java.langeCHO-.type=runtimeThreadMXBean线程系统Java.langeCHO-.type=threading下面的代码示例演示了一个使用JMX来检测JVM的一些信息的代码示例。

  ⒂包.wdbyte.JMX;导入Java.lang.management.pilationMXbean;导入Java.lang.management.garbagecollectormxbean;导入Java.lang.management.managementfactory;导入Java.lang.management.memorymxbean;导入Java.lang.management.memorymanagermxbean;导入Java.lang.management.memoryusage;导入Java.lang.management.operatingsystemmxbean;导入Java.util.list;导入Java.util.stream.collectors;/***JMXJVM**作者*/publilassJavaManagementExtensions{publicstaticvoidmain(String[]args){OperatingSystemMXBeanOperatingSystemMXBean=managementfactory.getoperatingSystemMXBean;stringosName=operatingsystemmxbean.getname;stringOSversion=operatingsystemmxbean.getversion;intprocessors=operatingsystemmxbean.getavailableprocessors;系统。out.println(string.format("操作系统:%s,版本:%s,处理器:%d"osName,osVersion,processors));pilationMXBeanpilationMXBean=managementfactory.getpilationmxbean;stringpilationMXbeanname=pilationMXbean.getname;system.out.println("编译系统:"pilationMXBeanName);MemoryMXBeanMemoryMXBean=managementfactory.getmemorymxbean;MemoryUsageheapMemoryUsage=memorymxbean.getheapmemoryusage;longmax=heapmemoryusage.getmax;longused=heapmemoryusage.getused;系统。out.println(string.format("使用的内存:%dmb/%dmb",已用//,max//));ListGarbageCollectorMXBeangcMXBeans=managementfactory.getgarbagecollectormxbeans;Stringgames=gcMXBeans.stream。地图(memorymanagermxbean::getname)。收集(collectors.joining(","));System.out.println("垃圾收集器:"Games);}}跑步可以得到以下结果:

  ⒃操作系统:MacOSX,版本:.,处理器:编译系统:HotSpot位分层编译器,内存:MB/MB,垃圾收集器:G年轻一代,G老一代..资源代理MBean服务器资源代理MBean服务器是MBean资源的代理,可用于远程管理。MBean资源和MBean服务器通常在同一个JVM中,但这不是必需的。

  ⒄如果希望MBeanServer管理MBean资源,则必须首先向MBeanServer注册资源,并且可以注册任何符合JMX的MBean资源。最后,MBean服务器将公开一个远程通信接口,向外界提供服务。

  ⒅JMX远程管理可以通过网络协议访问JMXAPI,如HTTP协议、SNMP(网络管理协议)协议、RMI远程调用协议等。JMX技术默认实现RMI远程调用协议。

  ⒆由于资源管理MBean的完全解耦,资源管理功能可以很容易地扩展到其他协议,例如通过HTTP在网页上进行管理。

  ⒇JMX的具体使用已经在资源管理MBean部分演示了使用JMX获取JVM运行信息,那么如果要定制一个资源MBean呢?

  ⒈下面是一个模拟内存资源MBean并最终远程管理它的示例。

  ⒉编写资源管理MBeanMBean的编写必须符合JMX的设计规范。MBean就像一个特殊的JavaBean,需要一个接口和一个实现类。MBean资源接口始终以MBean或MXBean结尾,实现类以除MBean或MXBean之外的接口命名。

  ⒊编写一个内存资源管理MBean接口,定义如下:

  ⒋包.wdbyt*/公共接口MyMemoryMBean{longgetTotal;voidsetTotal(longtotal);longgetused;voidsetUsed(长期使用);字符串doMemoryInfo;}然后实现这个接口:

  ⒌包.wdbyt*/公共类MyMemory实现MyMemoryMBean{私有longtotal私人长期使用;Overridepubliclonggettotal{returntotal;}Overridepublicvoidsettotal(longtotal){this.total=total;}Override公共longgetused{returnused;}OverridepublicvoidsetUsed(长时间使用){this.used=used}overridepublicstringdomemoryinfo{returnstring.format("使用内存:%dmb/%dmb",已用,合计);}}这个例子在MyMemory.java中只有两个long基本类型属性,所以接口以MBean结尾。如果资源实现类中的属性是对自定义实体类的引用,那么接口需要以MXBean结尾。

  ⒍这样就完成了线程号资源MBean的创建,其中total和used是资源属性,doMemoryInfo是资源操作方法。

  ⒎向MBeanServer注册资源从上面的JMX架构图中,我们知道MBean资源需要注册到MBeanServer进行代理,才能对外公开调用,所以我们想远程管理我们定制的MyMemory资源,需要先进行代理。

  ⒏包.wdbyte.JMX;导入Java.lang.management.managementfactory;importjavax.management.instancealreadyexistsexception;导入javax.management。MBeanRegistrationException导入javax.management.mbeanserver;导入javax.management.malformedobjectnameexception;importjavax.management.notpliantmbeanexception;导入javax.management.objectnam*/public类MyMemoryManagement{publicstaticvoidmain(String[]args)抛出MalformedObjectNameException,NotpliantMBeanException,InstanceAlreadyExistsException,MBeanRegistrationException,interruptedexception{//GetMBeanserverMBeanserverserverplatformmbeanserver=managementfactory。getPlatformMBeanServer;mymemorymymemory=newmymemory;mymemory.settotal(l);mymemory.setused(L);//注册对象名objectname=新对象名(".wdbyte.jmx:type=mymemory");platformmbeanserver.registermbean(mymemory,objectnam:mb/MB使用内存:mb/MB不带任何JVM参数启动Java程序。订单,JMX只能在当前机器问。如果要通过网络远程访问,需要在启动时指定当前机器ip和开放端口。

  ⒐$Java-d.sun.management.JMXremote=true#启用远程访问-D.sun.management.JMXremote.port=#自定义JMX端口-D.sun.management.JMXremote.ssl=false#无论是否使用SSL协议,都必须打开生产环境-D。sun.management.JMXRemote.authenticate=false#是否需要身份验证,生产环境是否必须打开-DJava.RMI.server.hostname=...YourClass.java#当前机器ip..远程管理jconsolejconsole是基于java自带的JMX技术的监控和管理工具。如果已经配置了JDK环境变量,可以通过jconsole命令直接从控制台启动它。

  ⒑启动jconsole后,将列出当前机器上的Java进程。在这里选择要监控的Java进程进行监控,连接后会有不安全协议的提示,因为Java程序默认启动是不会配置HTTPS协议的原因。

  ⒒连接后可以看到多维度的JVM监控信息,这些信息是通过读取JVM资源MBean信息获得的。

  ⒓下一页列出了线程信息。注意底部的线程信息,可以看到RMITCP线程,这也证明了JMX是默认由RMI协议远程管理的。

  ⒔在MBean页面上,可以浏览所有可管理的MBean信息,还可以看到我们自定义的.wdbyt:MB/MB使用内存:MB/MB使用内存:MB/MB使用内存:MB/MB在操作中,可以调用doMemoryInfo方法。调用后,可以看到返回值中使用的内存已经从启动时的mb更新为mb。

  ⒕和往常一样,本文中的代码示例存储在github中。/niumoo/JavaNotes。

  ⒖Arthas-解决Java在线问题的终极武器。使用JMH测试Java测试Java中的监控和管理原则概述。使用JMX监控和管理Java程序参考:

  ⒗你好世界:)I;m阿郎,一线技术工具人,认真写文章,求个赞。

  ⒘文章不断更新。可以关注官方账号标准普尔程阿郎"或者访问未读代码博客。

  ⒙这篇文章已经被Github./niumoo/JavaNotes,收录了很多知识点和系列文章。欢迎来到星空。

您可能感兴趣的文章:

相关文章