jmx server 和jmx client
启动jmx server 和jmx client,通过jconsole进入jmx server

然后通过其中远程进程,进入jmx client:

发现,两者可用的tab页不同, MBean的数量类型也不同:

如何理解呢?其实原因就是两者的MBeanServer不同, 前者是jmx自带的,后者是我new出来的。
访问JMImplementation 看看:
ObjectName jmxname = new ObjectName("JMImplementation:type=MBeanServerDelegate");
javax.management.MBeanServerDelegateMBean jmxMBean = JMX.newMXBeanProxy(connection, jmxname ,
javax.management.MBeanServerDelegateMBean.class);
String notificationInfo = jmxMBean.getSpecificationName();
System.out.println(notificationInfo);
// for (int i = 0; i < notificationInfo.length; i++) {
// System.out.println(notificationInfo.toString());
// }
不过却不能访问jmx server的MBean。。
即使在jmx server端访问,也是失败
Hashtable<String, String> aa = new Hashtable<String, String>();
aa.put("type", "MemoryPool");
aa.put("name", "PS Eden Space");
ObjectName memoryPoolMXBeanName = new ObjectName("java.lang",aa );
MemoryPoolMXBean memoryPoolMXBean = JMX.newMXBeanProxy(connection, memoryPoolMXBeanName ,
MemoryPoolMXBean.class);
MemoryType type = memoryPoolMXBean.getType();
System.out.println(type);
二月 16, 2014 3:21:15 下午 sun.rmi.server.UnicastServerRef logCallException
FINE: RMI TCP Connection(2)-127.0.0.1: [127.0.0.1] exception:
javax.management.InstanceNotFoundException: java.lang:name=PS Eden Space,type=MemoryPool
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1095)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:643)
at com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:668)
。。。
原因: 此时的connection不是通往jmx server的connection、JMXConnectorServer,应该
通过MBeanServer platformMBeanServer = ManagementFactory.getPlatformMBeanServer();然后创建 JMXConnectorServer
或者可以通过ManagementFactory 访问:
List<MemoryPoolMXBean> memoryPoolMXBeans = ManagementFactory.getMemoryPoolMXBeans();
for (Iterator iterator = memoryPoolMXBeans.iterator(); iterator
.hasNext();) {
MemoryPoolMXBean memoryPoolMXBean = (MemoryPoolMXBean) iterator.next();
System.out.println(memoryPoolMXBean.getName());
}
可见, 如果要访问jmx server内部的mbean(这些都可以理解为PlatformMBean 或者PlatformManagedObject),则需要使用ManagementFactory (静态类)
此外,这个类提供了静态方法访问jmx server的已注册的mbean 等方法,getPlatformManagementInterfaces等是前者抽象了的特殊方法:
Set<Class<? extends PlatformManagedObject>> set = ManagementFactory.getPlatformManagementInterfaces();
for (Class<? extends PlatformManagedObject> class1 : set) {
System.out.println(class1.getName());
}
MBeanServer platformMBeanServer = ManagementFactory.getPlatformMBeanServer();
ObjectName name = new ObjectName("JMImplementation:type=MBeanServerDelegate");
MBeanInfo beanInfo = platformMBeanServer.getMBeanInfo(name );
MBeanAttributeInfo[] attributes = beanInfo.getAttributes();
for (int i = 0; i < attributes.length; i++) {
MBeanAttributeInfo beanAttributeInfo = attributes[i];
System.out.println(beanAttributeInfo.getName());
}
jmx server 和jmx client的更多相关文章
- 解决:安装SQL Server 2008 Native Client遇到错误(在Navicat premium新建sqlserver连接时 需要):An error occurred during ...HRESULT: 0x80070422(注意尾部的错误号)
解决:安装SQL Server 2008 Native Client遇到错误(在Navicat premium新建sqlserver连接时 需要):An error occurred during . ...
- 在socket的server端处理client端发来的数据
一.楔子 最近做了一个需求遇到一个坑,归结成一个小问题,其实就是在socket的server端处理client端发来的数据的问题,现将这个问题总结一下,本文将数据在server端以字典的形式存储. 另 ...
- 用同一台PC的两个网口实现Iperf的server端和client端
用同一台PC的两个网口实现Iperf的server端和client端 2015年10月20日 20:35:11 阅读数:2943 有时候需要发包,仅仅需要一定速率的流量,并不需要关心收到报文的大小,一 ...
- 【翻译自mos文章】在RHEL7/OL7上安装Oracle 12.1.0.2的server端或者client时,报须要"compat-libstdc++"包
在RHEL7/OL7上安装Oracle 12.1.0.2的server端或者client时,报须要"compat-libstdc++"包 来源于: Installation of ...
- 【Tech】CAS多机部署Server和Java Client端
昨天尝试把cas的java client端部署到另外一台机器,结果就有问题了.(localhost部署cas server和java client端参见:http://www.cnblogs.com/ ...
- sql server 安装出现需要sqlncli.msi文件,错误为 microsoft sql server 2012 native client
在安装sql server 2017 时出现 弹框标题为 microsoft sql server 2012 native client 内容为需要sqlncli.msi文件 去本地目录找本身的那 ...
- Server Tracking of Client Session State Changes Connection Management
MySQL :: MySQL 8.0 Reference Manual :: 5.1.12 Connection Management https://dev.mysql.com/doc/refman ...
- nginx反向代理cas-server之2:生成证书,centOS下使用openssl生成CA证书(根证书、server证书、client证书)
前些天搭好了cas系统,这几天一致再搞nginx和cas的反向代理,一直不成功,但是走http还是测试通过的,最终确定是ssl认证证书这一块的问题,原本我在cas服务端里的tomcat已经配置了证书, ...
- swoole深入学习 2. tcp Server和tcp Client
这节来学习Swoole最基础的Server和Client.会通过创建一个tcp Server来讲解. server <?php class Server { private $serv; pub ...
随机推荐
- json数据测试接口
json数据测试接口:http://www.xiaoqiang.org/tools/JsonView/?1348068433
- checkbox、全选反选,获取值
<input id="Chk_All" onclick="CheckAll()" type="checkbox" /> < ...
- AutoMapper扩展
扩展类:AutoMapExtention using System; using System.Collections.Generic; using System.Linq.Expressions; ...
- React Native填坑之旅--与Native通信之iOS篇
终于开始新一篇的填坑之旅了.RN厉害的一个地方就是RN可以和Native组件通信.这个Native组件包括native的库和自定义视图,我们今天主要设计的内容是native库方面的只是.自定义视图的使 ...
- TypeError: matchExpr[type].exec is not a function
遇到了这个问题,很久没找到答案,后来使用了万能的google,貌似也没找到答案. 详细描述下: 通过使用 $(".select")来选择jqeury对象,没问题. 通过$(&quo ...
- ASP.NET Web服务调用发生错误,错误代码404
现象: iOS端使用ASIHTTP连接Web服务时,得到的数据是一个错误代码为404的页面,错误信息(web.config添加<customErrors mode="Off" ...
- 分析Linux内核创建一个新进程的过程
一.原理分析 1.进程的描述 进程控制块PCB——task_struct,为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息. struct task_struct ...
- iOS进阶_FMDB的简单使用
先引入FMDB第三方,点击查看方法 一.创建表 1.创建sql语句 NSString *createSql = @"create table if not exists t_stude ...
- [Leetcode][JAVA] Recover Binary Search Tree (Morris Inorder Traversal)
Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...
- AutoLayout - VFL
其实很早就像整理出一份VFL的总结出来,觉得有很多东西可以写,但是真正去总结的时候发现,VFL也并没有很多东西,其实应该是在布局的过程中直接用VFL语句思考的过程比较难以形成,多数布局问题其实是在实际 ...