InfoQ

新闻

现代应用性能管理深度概览

作者 Steven Haines 译者 王丽娟 发布于 2008年9月3日 上午11时6分

社区
Architecture
主题
应用服务器,
性能和可伸缩性
标签
扩展性,
性能评估,
Java EE

ADP的高级技术架构师Nicholas Whitehead在IBM developerWorks上发表了由三部分组成的文章系列,题为Java运行时监控。在该系列文章中,他给读者介绍了应用性能管理(APM):

  1. 第一部分,他研究了APM系统的属性,描述了系统监控中的反模式,介绍了监控JVM性能的方法,并提供了有效工具化应用源码的技术
  2. 第二部分中,他讨论了后编译技术工具,特别是拦截、类包装、字节码工具
  3. 第三部分,通过讨论应用生态系统的性能和可用性,进行了总结

Whitehead一开始先讨论了APM反模式,这些反模式确定了公司在拼凑监控方案时可能会面对的关键问题。他讲了如下几个反模式:

  • 盲点:只监控环境中的一部分,而非所有的因素,会导致分析过程中不确定的结果
  • 黑盒子:类似于盲点,但范围是到应用或组件。一个黑盒子就是一个组件,其监控解决方案不可见其内部的性能
  • 散列和分离的监控系统:该反模式对比了分散监控和统一监控,对具体应用堆栈(比如操作系统、JVM、或数据库)深入但散列的监控很难确定性能问题的根源。Whitehead给出了一幅图,很好地说明了这一点:
APM
  • 事后报告和相关性:试图从毫无联系的监控工具中提取数据,并将其结果关联成有意义的事情是很复杂的
  • 定时或应需式监控:许多监控解决方案开销都非常大,因此在出现问题后才配置来运行。在这种情况下,监控对确定问题根源来说可能为时已晚
  • 非持久化的监控:实时显示性能指标非常好,但如果不持久化数据,检查当前性能指标时,确定历史上下文会很困难
  • 依赖试运行监控:试运行时进行监控是好事,但完全依赖试运行监控是不够的,因为试运行时并不能完全预见用户的行为

讨论了反模式之后,Whitehead介绍了理想的APM系统所具备的下列属性(直接摘录于作者的文章):

  • 无孔不入:它监控所有的应用组件和依赖关系。
  • 细粒度的:它能监控非常底层的功能。
  • 统一:收集的所有测量数据都发送到同一个支持统一视图的APM上。
  • 持续:它持续每周7天、每天24小时监控。
  • 高效:收集性能数据不能对监控目标有不利影响。
  • 实时:被监控的资源指标能可视化,可报告,并可实时地提醒。
  • 基于历史:被监控的资源指标要持久化到数据存储中,从而使历史数据能可视化、比较并报告。

接下来Whitehead详细说明了满足这些需求的技术解决方案。他定义了一组“追踪器”,负责从监控组件获取数据,并将其发送给“性能数据源”。他解释了这些追踪器的特性,它们包括上述那些方面,因为不论指标是基于间隔采样、变量增量、粘性(表示它们不频繁改变)、基于事件、还是灵敏的,这些追踪器能以所收集数据的特性为基础自动发现它们的类型。然后他讨论了常用的收集器模式,比如轮询、监听、拦截。

Whitehead重新研究了核心JVM MBeans,以此深入研究了监控的细节,还为收集那些MBeans和应用特定的JMX数据构造了一个监控框架。随后他将注意力转到了监控类和监控方法,并回顾了四类常用的技术:

  • 源码工具:手动将其加入应用中
  • 拦截:进行调用时进行拦截,比如通过AOP,并捕获工具指标
  • 字节码工具:在运行时修改应用的字节码,以注入性能收集器
  • 类包装:用另一个包含工具逻辑的类包装或替换目标类

展示了如何实施源码工具(第一部分)之后,他确定了评估传入数据的规则和阈值。

在第二部分,他将注意力转到了后编译技术工具。他回顾了如何利用EJB3拦截器、Servlet过滤器拦截器、EJB客户端拦截器和内容传递,以及 Spring拦截器来捕获应用的性能指标。他介绍了如何使用JDBC驱动、连接、语句、结果集对象的类包装来工具化JDBC,并由此工具化数据库调用。最后,他介绍了字节码工具(BCI)是怎样工作的,还有JVM怎样提供一个标准的机制来通过javaagent这一JVM启动参数集成BCI。为了说明 APM厂商为什么跳过类包装选择BCI,他给出了如下的性能图:

BCIChart

Whitehead回顾了对Java应用归属的生态系统(也就是操作系统和宿主环境,其中包括数据库和消息基础设施)的监控策略,以此对该系列进行了总结。他讨论了代理监控和无代理监控的挑战和好处,接着深入研究了对Linux/UNIX系统和Windows系统的监控。他迎接的下一个挑战是数据库监控和上下文跟踪。他描述了JMS和消息系统,并说明如何通过合成消息和JMX的结合来监控它们。在第三部分结尾处,他讨论了可视化和报告功能,并给出了可视化技术的屏幕快照示例,包括仪表盘。

总之,该文章系列对性能监控进行了介绍和深度纵览,并包括细节层次,让读者理解在现成监控解决方案中的许多技术。

要获取更多关于性能和可伸缩性的信息,请阅读InfoQ上的“性能和可伸缩性”页面

查看英文原文:An in-depth overview of modern Application Performance Management

深度内容

和Google互补的搜索引擎Wolfram|Alpha

Wolfram|Alpha与Google究竟是什么关系,Wolfram|Alpha自己是如何定位的?Wolfram|Alaph在多大程度上是语义网搜索呢?InfoQ中文站就等等这些问题采访了Wolfram研究公司中国区商务经理王翔。

SOA契约成熟度模型

本文说明了所推荐的契约版本管理设计策略是如何与SOA成熟度模型发生联系的。文章目的是为实现版本管理和可组合性提供一个路线图。

数据服务简介

Vijay Narayanan在这篇文章中对数据服务的几个方面进行了介绍,它们都是SOA实践者和数据架构师感兴趣的内容。本文对数据服务的几个方面进行了介绍,包括需求定义,基本原理和好处、范围、开发以及消费模式。

分块云计算

在本文中,Jimmy Nilsson描述了一种他在过去数年间观察到的一种正在缓慢成长的架构风格,他把这种风格称为“分块云计算”。

豆瓣网技术架构变迁

罗马不是一天建成的,豆瓣的技术架构也是随着用户规模的增长一直在持续变化中。在本次演讲中,豆瓣的首席架构师洪强宁将与大家一起分享从上线时的单台服务器架构开始一直到现在的豆瓣架构变迁历程。

融合思想:深入探索S#arp架构

Billy McCafferty展示了S#arp架构,它在ASP.NET MVC框架的基础上,荟萃了当今的最佳实践,应用在ASP.NET Web应用程序的架构设计中。

王雷谈开源以及新兴市场计划

中国作为新兴市场中的新兴市场,是Sun在美国之外实施SSE(SUN Startup Essentials)项目重点关注的地区。在QCon Beijing 2009期间,InfoQ中文站有幸对此项目的负责人王雷先生进行了采访,探讨了关于开源、新兴市场、SSE等话题。

使用HTML5构建下一代的Web Form

HTML5 是由 WHATWG发起的,最开始的名称叫做Web Application 1.0,而后这个标准吸纳了Web Forms 2.0的标准,并一同被W3C组织所采用,合并成为下一代的HTML5标准。