InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

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

作者 Steven Haines 译者 王丽娟 发布于 2008年9月3日

领域
架构 & 设计,
运维 & 基础架构
主题
应用服务器 ,
性能和可伸缩性 ,
架构
标签
性能评估 ,
扩展性 ,
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

译者 王丽娟 王丽娟,04年大学毕业后持续从事Java EE中间件产品的开发,现在主要关注Java技术及中间件产品在云计算环境中的发展趋势和应用。

深度内容

大规模视频网站的计费与流量管理

本次分享将会就大规模视频网站的计费与流量管理这个话题,从操作层面细细进行讲解和分析,为系统工程师们揭示平日里我们没有关心的另一些内容。同时也希望本次分享能揭示行业中的一些“潜规则”,让互联网行业的流量与带宽管理更为开放与简洁。
本次演讲视频录制于QCon杭州2011

专访Jeffrey Richter:Windows 8是微软的重中之重

Jeffrey Richter以其多本Windows核心技术的经典著作而闻名,同时,他深入掌握微软的.NET等一系列核心技术,2012年1月,Jeffrey Richter在北京接受了InfoQ中文站的专访,谈到Windows 8和WinRT编程,并就异步编程、Windows编程中的可扩展性、性能和安全性方面给出自己的建议。

应用云平台的可用性——从新浪SAE看云平台设计

云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。

JVM定制改进 @ 淘宝

淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011

"伤得起"的云计算应用——对云端应用之架构的思考

2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。

让交付的速度跟上思考的速度

12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011

架构之路——穿行在产品和业务之间

篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011

特性注入:成功三部曲

本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。