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

发布时间:2024-03-14
本文主要介绍java监控技术(jmx监控java调用),下面一起看看java监控技术(jmx监控java调用)相关资讯。
再喜欢,动力无限。h:)搜索 程阿郎 。
本文已被github.com/niumoo/javanot
arthas-解决java在线问题的终极武器。使用jmh测试java 测试 java中的监控和管理原则概述。使用jmx监控和管理java程序1。什么是jmx?java管理扩展(java management extensions,jmx)技术是java se平台的一个标准功能,它提供了一种简单、标准的来监控和管理资源,并为如何定义一个资源给出了清晰的结构和设计模式,主要用于监控和管理java应用程序的运行状态、设备和资源信息,以及java虚拟机的运行情况。jmx可以是动态的,因此在创建、安装和实现资源时,也可以对其进行动态监控和管理。jdk附带的jconsole是由jmx技术公司实现的监控工具。
使用jmx技术时,可以定义一个名为mbean或mxbean的java对象来表示要管理指定的资源,然后可以向mbean server注册资源信息,对外提供服务。mbean server充当代理,对外提供服务,对内管理mbean资源。这样优雅的设计使得mbean资源管理和mbean服务器代理完全独立,从而可以自由控制mbean资源信息。
jmx不仅用于本地管理,jmx远程api为jmx增加了远程功能,使其能够通过网络远程监控和管理应用程序。
2.为什么使用jmx技术?jmx技术为java开发人员提供了一种简单、灵活和标准的方法来监控java应用程序。由于相对独立的架构设计,jmx可以顺利集成到各种监控系统中。
以下是jmx的一些具体优势:
开箱即用的监控功能,jmx是java se的标准部分。提供资源管理、服务托管、远程监控等基本管理功能,可以直接启用。jmx技术提供了资源、系统、应用程序和网络的通用和标准管理模式,不仅可以在本地使用,还可以远程使用。还可以扩展到其他场景,比如java ee应用。jmx技术提供了jvm状态的监控功能。jmx内置了jvm的监控功能,可以监控和管理jvm,非常方便。jmx建筑设计优秀,组件设计可以自由扩展。jmx技术严格遵守现有的java规范,如jndi规范。jmx可以与其他管理解决方案自由集成。多亏了开放的jmx api,jmx的资源可以通过网络服务来管理。3.jmx技术架构jmx技术架构主要由资源管理模块(mbean/mxbean)、资源代理模块(mbean server)和远程管理模块(remote api)组成。下图来自维基百科,很好的展示了三个模块之间的关系。
3.1.资源管理mbean资源管理被标识为体系结构中的资源探测级别。在jmx中,用mbean或mxbean来表示一个资源(以下简称mbean),资源也是通过mbean来访问和管理的,所以mbean中往往包含了资源的属性和操作方法。
jmx对jvm进行了多维度的资源检测,很容易启动jmx代理访问内置的jvm资源检测,从而通过jmx技术远程监控和管理jvm。
下面列出了jmx ;的资源检测类的jvm,所有这些都可以直接使用。
资源接口classloadingmxbean类管理的资源对象namevm中的实例数loads java . lang: type = class loading 1 compilation mxbean assembly system java . lang: type = compilation io。垃圾收集器mxb: type =垃圾收集器,name =收集器名称1或多个日志mx bean日志系统java . util . logging : type = logging 1 memorymanagermxbean内存池java . lange cho 9-@.com typ: type = memorypool,name=poolname1或多个memorymxbean内存系统java . lang: type = memory 1 operatingsystemmxbean操作系统java . lang: type = operating system 1 runtime mxb。ean运行时系统java . lange cho 9-@ .com type = runtime 1 threadmxbean线程系统java . lange cho 9-@ .com type = threading 1下面的代码示例演示了一个使用jmx来检测jvm的一些信息的代码示例。
包com . wd byte . jmx;导入java . lang . management . compilation mx bean;导入java . lang . management . garbagecollectormxbean;导入java . lang . management . management factory;导入java . lang . management . memorymxbean;导入java . lang . management . memorymanagermxbean;导入java . lang . management . memory usage;导入java . lang . management . operatingsystemmxbean;导入java . util . list;导入java . util . stream . collectors;/* * * jmx jvm * * @作者 */public class javamanagementextensions { public static void main(string[]args){ operatingsystemmxbean operatingsystemmxbean = management factory . getoperatingsystemmxbean;string osname = operatingsystemmxbean . getname;string os version = operatingsystemmxbean . getversion;int processors = operatingsystemmxbean . getavailableprocessors;系统。out . println(string . format( 操作系统:%s,版本:%s,处理器:% d osname,osversion,processors));compilationmxbean compilationmxbean = management factory . getcompilationmxbean;string compilation mx bean name = compilation mx bean . getname;system . out . println( 编译系统: compilationmxbeanname);memorymxbean memorymxbean = management factory . getmemorymxbean;memoryusage heapmemoryusage = memorymxbean . getheapmemoryusage;long max = heapmemoryusage . get max;long used = heapmemoryusage . get used;系统。out . println(string . format( 使用的内存:% dmb/% dmb ,已用/1024/1024,max/1024/1024));listgarbagecollectormxbean gcmxbeans = management factory . getgarbagecollectormxbeans;string gcnames = gcmxbeans.stream。地图(memorymanagermxbean:: getname)。收集(collectors . joining( , ));system.out . println( 垃圾收集器: gc names);}}跑步可以得到以下结果:
操作系统:mac os x,版本:11.6,处理器:12编译系统:hotspot 64位分层编译器,内存:3mb/4096mb,垃圾收集器:g1年轻一代,g1老一代3.2 .资源代理mbean服务器资源代理mbean服务器是mbean资源的代理,可用于远程管理。mbean资源和mbean服务器通常在同一个jvm中,但这不是必需的。
如果希望mbean server管理mbean资源,则必须首先向mbean server注册资源,并且可以注册任何符合jmx的mbean资源。最后,mbean服务器将公开一个远程通信接口,向外界提供服务。
3.3.jmx远程管理可以通过网络协议访问jmx api,如http协议、snmp(网络管理协议)协议、rmi远程调用协议等。jmx技术默认实现rmi远程调用协议。
由于资源管理mbean的完全解耦,资源管理功能可以很容易地扩展到其他协议,例如通过http在网页上进行管理。
4.jmx的具体使用已经在资源管理mbean部分演示了使用jmx获取jvm运行信息,那么如果要定制一个资源mbean呢?
下面是一个模拟内存资源mbean并最终远程管理它的示例。
4.1.编写资源管理mbean mbean的编写必须符合jmx的设计规范。mbean就像一个特殊的java bean,需要一个接口和一个实现类。mbean资源接口始终以mbean或mxbean结尾,实现类以除mbean或mxbean之外的接口命名。
编写一个内存资源管理mbean接口,定义如下:
包com . wd byt */公共接口mymemorymbean { long gettotal;void settotal(long total);long get used;void setused(长期使用);字符串domemoryinfo;}然后实现这个接口:
包com . wd byt */公共类mymemory实现mymemorymbean {私有long total私人长期使用;@ override public long get total{ return total;} @ override public void set total(long total){ this . total = total;} @override公共long get used{ return used;} @override public void setused(长时间使用){ this.used = used} @ override public string do memory info{ return string . format( 使用内存: % dmb/% dmb ,已用,合计);}}这个例子在mymemory.java中只有两个long基本类型属性,所以接口以mbean结尾。如果资源实现类中的属性是对自定义实体类的引用,那么接口需要以mxbean结尾。
这样就完成了线程号资源mbean的创建,其中total和used是资源属性,domemoryinfo是资源操作方法。
4.2.向mbean server注册资源从上面的jmx架构图中,我们知道mbean资源需要注册到mbean server进行代理,才能对外公开调用,所以我们想远程管理我们定制的mymemory资源,需要先进行代理。
包com . wd byte . jmx;导入java . lang . management . management factory;import javax . management . instancealreadyexistsexception;导入javax.management。mbeanregistrationexception导入javax . management . mbean server;导入javax . management . malformedobjectname exception;import javax . management . notcompliantmbeanexception;导入javax . management . object nam */public类mymemorymanagement { public static void main(string[]args)抛出malformedobjectnameexception,notcompliantmbeanexception,instancealreadyexistsexception,mbeanregistrationexception,interrupted exception {//get mbean server mbean server serverplatformmbean server = management factory。getplatformmbeanserver;my memory my memory = new my memory;my memory . set total(100 l);my memory . set used(20l);//注册对象名object name =新对象名( com . wd byte . jmx: type = my memory );platformmbean server . register mbean(my memory,object nam: 20mb/100 mb使用内存: 20mb/100 mb不带任何jvm参数启动java程序。订单,jmx只能在当前机器问。如果要通过网络远程访问,需要在启动时指定当前机器ip和开放端口。
$ java-dcom . sun . management . jmx remote = true \ #启用远程访问-dcom . sun . management . jmx remote . port = 8398 \ #自定义jmx端口-dcom . sun . management . jmx remote . ssl = false \ #无论是否使用ssl协议,都必须打开生产环境-dcom。sun . management . jmx remote . authenticate = false \ #是否需要身份验证,生产环境是否必须打开-dj ava . rmi . server . hostname = 150.158.2.56 yourclass.java #当前机器ip4.3 .远程管理jconsolejconsole是基于java自带的jmx技术的监控和管理工具。如果已经配置了jdk环境变量,可以通过jconsole命令直接从控制台启动它。
启动jconsole后,将列出当前机器上的java进程。在这里选择要监控的java进程进行监控,连接后会有不安全协议的提示,因为java程序默认启动是不会配置https协议的原因。
连接后可以看到多维度的jvm监控信息,这些信息是通过读取jvm资源mbean信息获得的。
下一页列出了线程信息。注意底部的线程信息,可以看到rmi tcp线程,这也证明了jmx是默认由rmi协议远程管理的。
在mbean页面上,可以浏览所有可管理的mbean信息,还可以看到我们自定义的com.wdbyt: 20mb/100 mb使用内存: 20mb/100 mb使用内存: 20mb/100 mb使用内存: 30mb/100 mb在操作中,可以调用domemoryinfo方法。调用后,可以看到返回值中使用的内存已经从启动时的20mb更新为30mb。
和往常一样,本文中的代码示例存储在github中。com/niumoo/javanotes。
当前系列:
arthas-解决java在线问题的终极武器。使用jmh测试java 测试 java中的监控和管理原则概述。使用jmx监控和管理java程序参考:

你好世界:)i ;m阿郎,一线技术工具人,认真写文章,求个赞。
文章不断更新。可以关注官方账号 标准普尔程阿郎 或者访问未读代码博客。
这篇文章已经被github.com/niumoo/javanotes,收录了很多知识点和系列文章。欢迎来到星空。
标签:
资源记忆
了解更多java监控技术(jmx监控java调用)相关内容请关注本站点。
上一个:美国rheodyne自动阀
下一个:win10移动硬盘不显示,Win10怎么弹出移动硬盘

CC0201CRNPO8BNR56,NPO 0201 0.56pF ±0.25pF 25V
再婚前财产又离婚怎么分
秋栽枣树严把六关
状态观测器设计
品茶融入到安溪人的骨子里
win10怎样升级到win11(windows 10怎么升级到windows 11)
自制瘦身茶强力去油腻
诈骗团伙员工怎么定罪
认购遇冷后又遭做空,华住集团今日香港“二次上市”!
鉴别茶叶真假的四个特征