当前位置: 首页 > 后端技术 > Java

Java 中的监控与管理原理概述

时间:2023-04-01 21:43:25 Java

JavaHelloworld监控管理原理概述:)微信搜索“程序猿Alan”。本文已收录在Github.com/niumoo/JavaNotes和ProgrammerAlanBlog,里面有很多知识点和系列文章。当前文章属于Java性能分析与优化系列,点击查看全部文章。本文是Java性能分析监控与优化系列文章的第一篇。本来打算介绍Java性能分析方法和流行的监控工具,但是写完之后才发现只介绍分析方法和监控工具太简单了。.如果只使用某个工具,而不知道其背后的实现原理,总会有一种陌生感。我觉得你也是一样的,所以加了这篇文章。JavaSE监控管理特性本文介绍Java标准版(JavaSE)平台提供的监控管理技术——JMX(JavaManagementExtensions)技术。JavaSE平台本身提供了监控管理服务的实用功能模块,按功能主要分为以下四类:Java监控管理APIJava虚拟机检测Java管理扩展技术(JMX)Java监控管理本文ontools将介绍这四个部分的相关知识,旨在了解JavaSE监控管理的相关功能,并对相关概念有一个了解。Java监控和管理APIJavaSE包括用于监控和管理的(java.lang.management)API。通过这些API,可以实现应用的自我监控。该API主要提供访问以下信息:类加载相关。JVM相关,比如运行时、系统环境变量、用户输入参数。线程相关的,比如线程状态、线程统计、线程堆栈等内存使用情况。GC情况。死锁检测。操作系统信息。下图是Java17中的java.management模块,JConsole通过访问这些管理API提供的数据,绘制出监控的接口版本。Java虚拟机监控如上所述,JavaSE具有内置的开箱即用的监控和管理功能。通过这些功能,可以实现程序的自我监控。Java默认实现了对Java虚拟机相关信息的监控。在Java监控和管理API部分也列出了一些API可以监控的内容,那么如何使用呢?下面通过一个简单的例子来演示如何通过监控管理API获取系统信息、编译器信息、内存信息和垃圾收集器信息。包com.wdbyte;导入java.lang.management.CompilationMXBean;导入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;公共类JavaManagement{publicstaticvoidmain(String[]args){OperatingSystemMXBeanoperatingSystemMXBean=ManagementFactory.getOperatingSystemMXBean();StringosName=operatingSystemMXBean.getName();StringosVersion=operatingSystemMXBean.getVersion();intprocessors=operatingSystemMXBean.getAvailableProcessors();System.out.println(String.format("操作系统:%s,版本:%s,处理器:%d个",osName,osVersion,processors));CompilationMXBeancompilationMXBean=ManagementFactory.getCompilationMXBean();细绳compilationMXBeanName=compilationMXBean.getName();System.out.println("编译系统:"+compilationMXBeanName);MemoryMXBeanmemoryMXBean=ManagementFactory.getMemoryMXBean();MemoryUsageheapMemoryUsage=memoryMaxBean.getHeapMemoryUsage();longmax=heapMemory(Usage)longused=heapMemoryUsage.getUsed();System.out.println(String.format("已用内存:%dMB/%dMB",used/1024/1024,max/1024/1024));ListgcMXBeans=ManagementFactory.getGarbageCollectorMXBeans();字符串gcNames=gcMXBeans.stream().map(MemoryManagerMXBean::getName).collect(Collectors.joining(","));System.out.println("垃圾收集器:"+gcNames);}}运行时指定内存为100MB(-Xms100M-Xmx100M),得到如下结果操作系统:MacOSX,版本:11.6,处理器:12编译系统:HotSpot64-BitTieredCompilersMemoryUsed:2MB/100MBGarbageCollection:G1YoungGeneration,G1OldGeneration:::tip注意你可以看看仔细代码发现很多类都是以MXBean结尾的,这是什么意思呢?:::JavaManagementExtensions(JMX)在JavaVirtualMachineMonitoring的代码示例中,可以看到很多以MXBean结尾的类,这里就涉及到了JMX(JavaManagementExtensions)技术。JMX技术提供了一种简单、标准的方式来管理资源,如操作系统、虚拟机信息、内存状态、线程信息等,统称为托管资源。而JMX可以是动态的,所以可以使用JMX技术来监控和管理各种资源。您可以使用JMX技术来监控Java虚拟机的状态,也可以使用JMX技术构建您自己需要管理的资源。JMX技术真的像资源定义那么简单吗?不。JMX规定了Java中资源定义的方式、资源管理的方式、监控管理的架构、具体实现的设计模式、监控管理的相关API、网络的远程监控服务(RMI)。这一系列功能统称为JMX技术。是JavaSE平台的标准部分。上面多次提到了管理资源,那么如何定义一个资源呢?JMX技术提供了资源定义的架构和设计模式。在JMX中,定义了一个Java对象,称为MBean或MXBean来指示要管理的指定资源。资源定义的Java类名必须以MBean或MXBean结尾。下图是Java17中一个以MXBean结尾的资源定义类,通过命名可以看出每个类代表什么资源。本文主要介绍JavaSE中的监控和管理功能,让大家对Java中监控和管理背后的原理和概念有一个具体的了解,所以MBean和MXBean的具体设计和实现不是本文的重点,这里就不过多介绍了,将在下一篇独立的JMX技术文章中介绍。Java监控管理工具JMX技术中提到,JMX不仅提供监控管理API,还提供网络远程管理的服务。可以使用JMX相关的监控管理工具,通过网络远程连接正在运行的Java虚拟机,监控其运行状态,Java中集成的jconsole就是这样一个工具。启动一个可以在本地持续运行的Java程序作为监控对象。如果配置了Java环境变量,可以直接通过jconsole启动工具。$jconsole启动后,jconsole已经列出了本地运行的Java程序,你可以选择你要监控的程序进行监控。连接成功后,可以看到当前Java进程的资源使用情况。在MBean页面中,您可以看到已定义的各种资源的详细信息。Jconsole是一个功能强大的图形界面JMX管理工具。它不仅可以连接本地Java程序,还可以通过网络监控远程Java程序的运行状态。不过这不是本文的重点,不做详细介绍。参考:https://docs.oracle.com/en/java/javase/17/jmx/https://docs.oracle.com/en/java/javase/17/management/当前文章属于Java性能分析与优化系列文章,点击查看全部文章。文章持续更新中,微信搜索“程序猿Alan”或访问“程序猿阿郎博客”即可第一时间阅读。本文已收录于Github.com/niumoo/JavaNotes。知识点多,系列文章多。欢迎来到星空。