以编程的方式连接JMX代理
在探讨如何用MC4J监测Tomcat
之前,我们先简略地看一个通过远程JMX API连接远程JMX代理(这里指的是Tomcat servlet容器)的Java
应用示例。以启用JMX监控的方式启动Tomcat。
这个JMX远程客户端示例被称为RemoteJMXClient,基本上是一个独立的、起到JMX连接器作用的Java应用程序。该Java类位于Web应用示例的src\com\remotejmx\client目录下,运行这个Java应用程序时要在classpath中添加jmx-remote.jar和jmxri.jar文件。以下步骤说明了如何连接远程JMX服务器
:
1.以协议、主机名、远程JMX端口号和凭证哈希表(存有用户名和密码)为参数创建JMXServiceURL对象:
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:8999/jmxrmi"); Map map = new HashMap(); String[] credentials = new String[] { "monitorRole" , "QED" }; map.put("jmx.remote.credentials", credentials);
2.用第一步中得到的url和凭证哈希表创建JMXConnector对象,在获得了JMX连接器的引用后,调用getConnectionId()方法来确保得到一个有效的连接ID:
JMXConnector conn = JMXConnectorFactory.connect(url, map); System.out.println("JMXConnector="+conn.toString()); String id = conn.getConnectionId(); System.out.println("Connection Id=" + id);
3.接下来从JMXConnector对象中获得MBeanserverConnection对象:
mbsc = conn.getMBeanserverConnection(); String domains[] = mbsc.getDomains(); System.out.println("# of domains="+domains.length); for (int i = 0; i < domains.length; i++) { System.out.println("Domain[" + i + "] = " + domains[i]); }
4.在获得MBeanserverConnection对象后,你就可以象调用连接到本地JMX服务器(在同一个JVM虚拟机上)的MBeanserver那样调用MBeans有关的方法。你可以查看JMX服务器上域的数量和类型,还能获取在该服务器上注册的MBeans的数量、属性及操作。下面的代码片断展示了这一过程:
mbsc = conn.getMBeanserverConnection(); String domains[] = mbsc.getDomains(); System.out.println("# of domains="+domains.length); for (int i = 0; i < domains.length; i++) { System.out.println("Domain[" + i + "] = " + domains[i]); } // Get MBeans count Integer MBeansCount = mbsc.getMBeansCount(); System.out.println("MBeansCount : " + MBeansCount.intValue());
5.接下来查询服务器上的MBeans,显示它们的属性和操作,检索有关集群对象类型的MBeans细节,就像下面的代码展示的那样。在下一节我们会用MC4J看到同样的集群细节。
Set MBeanset = mbsc.queryMBeans(null, null); System.out.println("MBeanset.size() : " + MBeanset.size()); Iterator MBeansetIterator = MBeanset.iterator(); while (MBeansetIterator.hasNext()) { ObjectInstance objectInstance = (ObjectInstance)MBeansetIterator.next(); ObjectName objectName = objectInstance.getObjectName(); String canonicalName = objectName.getCanonicalName(); System.out.println("canonicalName : " + canonicalName); if (canonicalName.equals("Catalina:host=localhost,type=Cluster")) { // Get details of cluster MBeans System.out.println("Cluster MBeans Details:"); System.out.println("========================================="); getMBeansDetails(canonicalName); } String canonicalKeyPropList = objectName.getCanonicalKeyPropertyListString(); }
6.最后关闭JMX MBeans连接并释放资源:
conn.close();
Web应用示例安装
本节用一个Web应用示例来测试
Tomcat集群的宕机(failover)和session复制。我在两个集群节点上部署Web应用,还编写了一个客户端程序,用来做在servlet容器里创建和修改HTTP session的负载测试
。
通过以下步骤启动服务器集群及负载均衡:
1.启动两个服务器实例并启用JMX监测功能。
2.启动负载均衡。我用的是Pen-一个简单的、基于TCP协议的负载均衡工具,它基于一些算法来分配负载,比如轮循算法,能自动检测到宕机的服务器并将客户请求转发到集群中其它可用的服务器上。有关安装和配置Pen的详细情况参见Pen的网页。
我用下面的命令启动负载均衡,负载分配算法选项用的是轮循算法:
pen -r -a -f -d localhost:8080 192.168.0.10:9080 192.168.0.20:10080
其中:
---r:用轮循算法处理负载均衡
---a:用ASCII码打印传入/传出数据
---f:前台方式运行
---d:启用Debug
模式
3.双击可执行文件(C:\dev\tools\mc4j\MC4J Console 1.2b9.exe)启动MC4J(注:在这个应用示例中,我在同一台机器上运行JMX客户端和Tomcat集群,但在真实的场景中,JMX客户端是在远程机上运行,而不是在应用服务器上),启动后MC4J的控制台应该如图2所示:
图2 MC4J控制台窗口的截图。
控制台启动后,创建一个新的连接绑定到JMX服务器上。用Management菜单的Create Server Connection选项新建一个连接,命名为Tomcat-5.5.9-instance1,该连接的设置如表4所示:
表4 MC4J的Tomcat连接设置
注意:你需要在classPathEntries参数中指定catalina.jar、catalina-cluster.jar和 catalina-optional.jar文件(位于%CATALINA_HOME%\server\lib\目录下)。
当Tomcat服务器群启用了远程JMX,再将配置好的MC4J连接到这些服务器上,我们就可以运行java
测试客户端并用Log4J记录sesion的详细情况。在下一节我们将看到测量层的细节以及测试客户端运行时的参数。
测量层
我用多线程模式运行客户端,并指定迭代的次数,每达到100次请求对session复制的详细情况(如在集群中传递session发生变化以及处理请求花费的时间)做一个记录,同时用JMX控制台对session细节进行监测。我们按以下步骤运行测试客户端并监测服务器统计数据:
1.运行客户端:我用SessionReplicationClient仿真对Tomcat服务器群的负载测试,采用了以下设置:
---线程数:2
---迭代次数:1,000
---请求间隔:1,000 毫秒
---测试样本数量:1,000
2.用MC4J控制台监测集群元素:如图3所示,你可以通过Cluster 和 ClusterSender组件来监测集群的细节,比如复制模式(replicationMode)、请求数量(nrOfRequests)以及数据传输总量(totalBytes),都会显示在属性窗口中。
图3 Tomcat集群MBeans的截图。
3.用session管理MBeans检查session细节:图4显示了HTTP session的详细情况,包括session数量、活动session数和超时session数。你还可以从日志文件中了解到session复制需要的时间。
图4 session细节的截图。
至此你已看到了如何通过远程JMX提供的API查看Tomcat服务器集群和session复制的运行时细节,以及如何通过JMX客户端的图形用户界面查看这些细节而无需任何JMX编码。
小结
在本文中你看到了如何运用JMX MBeans技术以及在JMX控制台(MC4J)的帮助下从远程监测Tomcat服务器(特别是集群和session复制模块),你会发现用J2SE 5.0提供的JMX技术监测J2EE应用服务器(或者servlet容器)是多么的方便和强大。
使用JMX技术来监测和管理服务器,开发
者、网管和运营部门都可以从中获益。有了远程JMX技术,开发者可以监测他们在服务器上的应用程序,发现J2EE应用中需要调整和优化的瓶颈,从而改善应用的性能
和伸缩性。网管可以看到服务器的统计数字,如CPU使用率、线程数、内存使用率,以评估当前和未来的负载量需求
。运营部门可以通过远程JMX监测来检查服务器状态和阀值溢出警报,提前发现任何与服务器有关的问题。
在使用JMX监测应用服务器时安全
是另一个要考虑的重要因素,特别是在产品环境下。比如必须通过安全可控的方式(使用用户名、密码)访问JMX控制台,只允许经过授权的用户访问、查看和修改MBeans的属性和操作。系统管理员应当在服务器监测控制台上对MBeans属性和操作级别的访问进行细粒度的控制,还要将所有的基于JMX访问用户的活动记录到日志文件中供以后的报告和审计之用。
JMX客户端为远程绑定到各种应用服务器、监测服务器状态以及运行于这些服务器之上的应用提供了一个集中的监测控制台。在企业对其所有的服务器和应用进行生命期管理方面,远程JMX监测是个相当不错的解决方案
。
- 大小: 61.3 KB
- 大小: 5.6 KB
- 大小: 74.8 KB
- 大小: 78.3 KB
分享到:
相关推荐
视频文件---! <br>基于JMX,用MC4j远程监控Tomcat5.5 用MC4J实现JMX远程监测与管理
MC4J是用于使用Java管理扩展(JMX)进行远程监视和管理的Swing应用程序。 它包括对所有主要应用程序服务器的支持和高级功能,例如实时属性图形绘制和可自定义的仪表板。
该文档的版本为2.60,发布日期为2019年3月,涵盖了MC4U硬件版本2的相关信息。文档强调了信息的版权保护,所有权利归ACS Motion Control有限公司所有,并列出了多个与ACS Motion Control相关的商标。 MC4U硬件是ACS ...
《FMV-680mc4 触摸屏驱动详解》 富士通FMV-680mc4是一款知名的笔记本电脑型号,其触摸屏功能是该设备的一大亮点。为了确保用户能充分利用这一特性,安装合适的触摸屏驱动至关重要。本文将深入探讨FMV-680mc4触摸屏...
minecraft-world-downloader 一个Minecraft世界下载器,其工作原理是拦截并解密客户端与服务器之间的网络流量,以读取和保存块数据。 产品特点 不需要客户端修改,因此无论是否适用于每个游戏客户端 ...
黑素皮质素受体4(melanocortin 4 receptor,MC4R)是G蛋白偶联受体(G Pmtein coupled receptorsGPCRs)超家族的一个成员,在人和鼠的体重、能量稳态和采食量的调控中具有重要作用。实验以东北农业大学建立的高低脂...
详细参考博客...
mc4 受启发的体素建筑游戏执照Web客户端是根据GPLv3 +许可的,而服务器是AGPLv3 +。 有关,请参阅和每个源代码文件的顶部。 库和资产许可证文件分布在整个源代码树中,下面列出了链接。服务器编译中安装构建依赖项:...
2. **数据帧格式**:从提供的【部分内容】可以分析出MC4协议数据帧的基本格式。数据帧以“ENQ”(ASCII码的05)开始,紧接着是特殊字符“F9”(0x0F)和两个字节的长度信息(包括帧长度和检查位)。随后是起始字符...
2. **安装Cheat Engine**:虽然Cheat Engine主要是为PC设计的,但通过一些方法,如使用模拟器或特殊软件,可以使其与PS4配合使用。请注意,这可能违反了Sony的使用条款,并可能导致账号被禁。 3. **连接PS4**:为了...
"mc4ap:适用于所有平台的 Mercury 组件"是一个专为多平台设计的软件开发工具,它提供了统一的逻辑接口规范来操作各种组件。这个工具的核心目标是促进跨平台的兼容性和灵活性,使得开发者能够在不同的操作系统上如...
组件表面应无损伤、污染,MC4插头和接线盒状态良好,无腐蚀,运行温度不宜过高,无热斑现象。 - 直流侧线缆检查:线缆应无动物啃咬痕迹,线头无腐蚀,穿线孔洞需密封。 - 汇流箱检查:汇流箱应保持外壳完好,线缆...
- **更换与清洗**:涉及料筒、加热圈、过滤器等关键部件的更换与清洗方法,有助于延长设备使用寿命。 - **检查和维护表**:提供了详细的维护计划表,帮助用户定期检查设备状况,预防潜在故障的发生。 综上所述,...
2. 电站规模和数据:2.5MWp电站规模,即电站的设计装机容量为2.5兆瓦峰值。此外,电站设计还包括了相关的直流电压等级、最大系统电压、MPPT(最大功率点跟踪)电压范围和逆变器等关键电气参数。 3. 相关标准:文档...
mc4d 控件 == Basic Controls == ESC => Exit mc4d == Controling the display == ; => Toggle between displaying round-world and minecraft-world , => Toggle display of example hypercube wireframe . => ...
- **不安全的反序列化**:研究如何通过恶意的数据结构引发远程代码执行等严重后果。 - **使用含有已知漏洞的组件**:通过分析依赖库的版本,理解如何利用过时组件的漏洞发起攻击。 - **日志记录和监控不足**:探索...