位于上海,服务全国!

位于上海,服务全国!

了解Java监视API和Java管理API

作者:admin 分类: 时间:2017-12-12 20:55:44 点击量:2243


 

监控和管理服务是Java不太常用的功能之一,不是因为它们不重要,或者可以移除它们,而是因为它们可在特殊情况下使用。 这是专门为那些开发人员和系统管理员提供,尤其当他们的应用程序对性能要求较高,需要一些工具来校准和管理它们时。 Java为这方面的综合处理提供了广泛的支持。 但是,不可能提供Java平台监控和管理功能的完整概述; 本文试图快速简要地描述这一技术的关键方面。

概述
Java平台提供的监控和管理功能可以大致分类为:

Java虚拟机工具
监控和管理API
监视和管理工具
Java管理扩展(JMX)技术
Java虚拟机工具

被称为JVM的开箱即用的管理工具,它提供了一个内置机制来监控JVM及其上运行的应用程序,而且无论这些应用程序在本地还是远程机器上。应用程序应该被设置为可在执行期间启用此功能。 Java平台使用Java管理技术(JMX)技术来实现这一功能。 如要启用此功能,我们需要创建一个名为MBean(Managed Bean)的JMX 代理,然后将其注册到MBean服务器。 MBean只代表所要管理资源的Java对象。 现在,为了使JMX代理能够监视和管理JVM,我们必须在JVM启动期间设置一些系统属性,例如:

 

 

 

例如,本地监控可以通过如下方式启用:
$ java -Dcom.sun.management.jmxremote = true -jar MyApp.jar
远程监控可通过如下方式启用:
java -Dcom.sun.management.jmxremote \
   -Dcom.sun.management.jmxremote.port=1617 \
   -Dcom.sun.management.jmxremote.authenticate=false \
   -Dcom.sun.management.jmxremote.ssl=false \
   MyProg
如果没有在属性管理启动时设置属性,则使用默认值。
监控和管理API
监控和管理API可在java.lang.management下打包。 它们提供了编程接口,用于在运行时动态管理和监控JVM和底层操作系统。 这些API提供了在远程和本地级别监控和管理JVM的功能,以及可以监控它们的应用程序。 人们可以访问以下动态内容:
加载的类
正在运行的线程,如其的状态,竞争性统计数据和堆栈跟踪
运行应用程序的内存使用状态
垃圾收集的统计信息
死锁检测
底层的操作系统
根据Java 9的推荐,日志信息可以通过在java.management模块下的java.lang.management包中声明的PlatformLoggingMXBean接口来获取。 在版本9之前,即直到Java 8,日志信息由java.util.logging包中声明的LoggingMXBean接口检索。 LoggingMXBean中声明的方法现在已被弃用。

API还提供必要的接口,以便通过现有应用程序中的插件访问JConsole。
监控和管理工具
Java SE提供的主要监控和管理工具是JConsole。它是一个工具,并且可通过图形窗口提供内存,线程,类,JVM信息和其他信息。通过图表和绘图方式提供运行时的统计信息。 JConsole是JMX API的一个执行,并且可用于监视JVM运行时的性能或任何其他专门用于监视的应用程序。

Java SE 9内的JConsole具有许多新的增强功能。 (我们将在另一篇文章中介绍JConsole。)
Java管理扩展(JMX)技术
Java Management Extension是通过Java Management Extension(JSR 3)和JMX Remote API(JSR 160)开发的规范。 JMX API专门用于管理和监控Java平台资源,例如JVM本身,设备,由其提供的服务以及在其上运行的应用程序。

根据Java Platform SE管理和扩展指南,JMX规范在Java编程语言中定义了架构,设计模式,API以及用于应用程序和网络管理和监视的服务。
为了使用这种技术,一个或多个被称为托管豆(MBeans)的Java对象会检测指定的资源。 这些MBean被注册在核心管理对象服务器中,称为MBean服务器。 MBean服务器充当管理代理,并且可以在为Java编程语言启用的大多数设备上运行。
定义MBean很简单。 如果我们要编写一个类的MBean,比如MyClass,我们需要创建一个名称为MyClassMBean的接口,并通过MyClass执行这个接口。 例如:

package org.mano.jmx.examples;
public interface ConverterMBean {
   public double celciusToFahrenheit(doublecelcius);
}

package org.mano.jmx.examples;
public class Converter implementsConverterMBean {
   @Override
   public double celciusToFahrenheit(doublecelcius) {
      // ...
      return 0;
   }
}
因此,一个标准的MBean由MBean接口组成,且该接口会列出所有公开的属性和运算,以及实现这个接口的类并还有提供被检测资源的方法。
要管理资源,必须创建一个JMX代理并注册到MBean服务器。 这里是一个示例。

package org.mano.jmx.examples;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import java.lang.management.ManagementFactory;
public class Main {
   public static void main(String[] args) throwsException{
      MBeanServer server= ManagementFactory
         .getPlatformMBeanServer();
      ObjectName objName=newObjectName
         ("org.mano.jmx.examples:type=Converter");
      Converter mbean=newConverter();
      server.registerMBean(mbean,objName);
      Thread.sleep(Long.MAX_VALUE);
   }
}
还有另一种类型的MBean,称为MXBean。 MXBeans是以与MBean类似的方式编写的。不同的是,MXBeans不受类型限制,使它们与潜在客户兼容。而且,它们比标准MBean更简单。例如, MBean会暴露其数据类型的属性,且客户端必须具有相同的属性类型; MXBeans使用现有的类型,如原始类型,字符串和组合等等。优点是MXBean可以在不加载特定类型的情况下使用现有的类型,并使它们与非Java客户端交互操作 。
结论
问题的关键在于Java监控和管理服务是围绕JMX技术构建的。因此,在开始监控和管理服务之前了解JMX是至关重要的。 JConsole是监控和管理Java应用程序的福音。它提供了必要的信息来监控正在运行的应用程序的内容,并在运行时(不管是远程还是本地管理和监视JVM)对其进行有效微调。