Java运行时监控,第3部分: 监控应用程序生态系统的性能与可用性(2) - 编程入门网
点。监控这些点的难度要大一些,因为从很多角度来看,该服务看起来都运行得很好,服务的调用被频繁地分配,并且运行的时间也很短。仍然保持神秘的是上游瓶颈,消息要经过这里被转发到下一个目标,但消息在这里的传输速度很慢或者根本无法通过。
由于大多数消息传递服务都存在于 JVM 中,抑或是作为一个或多个本机进程而存在于一个主机(或一组主机)上,监控点包括一些与目标服务有关的相同的点。这些目标服务可能包括标准 JVM JMX 属性、支持主机上的监控资源、网络响应,以及诸如内存大小和 CPU 使用这样的服务进程特征。 我将概述消息传递服务监控的四个范畴,它们当中的三个都是专用于 JMS 的,另一个则涉及到专有的 API: 为了度量一个服务的吞吐性能,收集器会定时向该服务发送一组综合的 测试消息,然后等待它们的返回。发送、接收和整个往返过程的总运行时间都被度量、跟踪,同时被度量和跟踪的还有所有失败或超时事件。 很多基于 Java 的 JMS 产品都通过 JMX 公开指标和监控点,所以我将简短地回顾一下如何使用 Spring 收集器实现 JMX 监控。 有些消息传递服务为通信代理的管理提供了一个私有的 API。这些 API 通常包含提取运行中服务的性能指标的能力。 如果缺少上述选项中的任意一个的话,都可以使用诸如 javax.jms.QueueBrowser 这样的标准 JMS 构造来检索有用的指标。 通过综合测试消息来监控消息传递服务 综合消息的前提是将测试消息的发送和接收安排到目标消息传递服务并度量消息的发送、接收和整个往返过程的运行时间。为了设计消息的返回并准确地度量从远程位置发送消息的响应时间,最佳的解决方案就是部署远程代理,它的任务是: 监听中央监控器的测试信息 检索它们 给每一个收到的消息添加一个时间戳 重新将它们发送回消息传递服务,目的是返回到中央监控器 然后中央监控器可以分析返回的消息,得出进程中的每一个跳跃点(hop)的运行时间并跟踪到 APM 系统。如图 15 所示: 图 15. 综合消息 虽然这个方法涉及到了监控的大多方面,但它还是有一些缺点: 它需要部署和管理一个远程代理。 它需要在消息传递服务上为测试消息传输创建其他的队列。 有些消息传递服务允许自动动态创建一级队列,但很多消息传递服务都需要通过管理接口或管理 API 来手动创建队列。 这里介绍的另一个专用于 JMS(但可能在其他消息传递系统中有等效体)的选择是使用临时队列或主题。临时队列可以由标准 JMS API 自动创建,所以不需要介入任何管理。这些临时构造有很多额外的优势,但只有最初的创建者可以看到,其他所有 JMS 参与者都无法看到。 在这个场景中,我将使用 JMSCollector,它可以在启动时自动创建一个临时队列。当调度器提示时,它会将很多测试消息发送给目标 JMS 服务上的临时队列,然后再收回它们。这就有效地测试了 JMS 服务器的吞吐量,而无需创建具体队列或部署远程代理。如图 16 所示: 图 16. 带有临时队列的综合消息 Java运行时监控,第3部分: 监控应用程序生态系统的性能与可用性(2)(4)时间:2011-02-13 IBM Nicholas Whitehead这个场景的 Spring 收集器类为 org.runtimemonitoring.spring.collectors.jms.JMSCollector。配置依赖项相当的简单明了,而且大多数依赖项已经在前面的例子中设置过了。JMS 连通性需要一个 JMS javax.jms.ConnectionFactory。我用来获取它的 Spring bean 与在 Windows WPM 收集的例子中用来获取 JMS 连接工厂的 Spring bean 相同。在这里重新修改一下,它需要 org.springframework.jndi.JndiTemplate 类型的 Spring bean 的一个实例,该类型的 Spring bean 可以给我的目标 JMS 服务提供一个 JNDI 连接;它还需要 org.springframework.jndi.JndiObjectFactoryBean 类 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |