9月7日-8日,相约 2023 腾讯全球数字生态大会!聚焦产业未来发展新趋势! 了解详情
写点什么

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

  • 2008-09-03
  • 本文字数:1864 字

    阅读完需:约 6 分钟

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

活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2008-09-03 11:06940
用户头像

发布了 151 篇内容, 共 58.6 次阅读, 收获喜欢 18 次。

关注

评论

发布
暂无评论
发现更多内容

好玩又好用,一款轻松就可以实现音视频的Demo

anyRTC开发者

音视频 移动互联网 RTC anyRTC Demo

DockerFile 详解

陈磊@Criss

企业微信群消息机器人发送开源项目

陈磊@Criss

Docker 容器连接

陈磊@Criss

Python的Twisted事件驱动的网络引擎框架

陈磊@Criss

高中生写LOL外挂1年狂赚500万,落网前刚买下120万保时捷...

程序员生活志

编程 程序员 外挂

Clover:解决Java8和Cobertura的问题以及解决方法

陈磊@Criss

PIP的报错Could not fetch URL https://pypi.org/

陈磊@Criss

该了解一波了!零基础入门Nginx

程序员的时光

nginx Docker

Git删除仓库中的文件和文件夹

陈磊@Criss

Java的Override和Overload

陈磊@Criss

聊聊微前端的原理和实践

vivo互联网技术

大前端

python判断文件和文件夹是否存在、创建文件夹

陈磊@Criss

pipreqs:生成python项目的requirements

陈磊@Criss

你还应该知道的哈希冲突解决策略

vivo互联网技术

哈希冲突

优质单元测试的十大标准,你有遵循吗?

禅道项目管理

项目管理 单元测试 自动化测试

Kafka实战宝典:一文带解决Kafka常见故障处理

数据社

kafka 监控

人人都可以掌握的正交试验设计测试用例方法

陈磊@Criss

欲速也可达:Battle接口测试训练系统的1分钟快速说明

陈磊@Criss

jmeter 执行python脚本

陈磊@Criss

微信小程序的自动化测试框架

陈磊@Criss

最受欢迎的男友职业排行榜Top10

程序员生活志

程序员

Nginx的容器部署

陈磊@Criss

国内程序员最容易发音错误的单词集合

程序员生活志

程序员 经验总结

Docker的Image

陈磊@Criss

快速掌握的测试用例优先级划分方法

陈磊@Criss

如何选择一个性能测试工具(LoadRunner和Locust的一次对比)

陈磊@Criss

告别下载速度慢!Docker配置阿里云镜像仓库

程序员的时光

Docker 阿里云

Git使用教程:最详细、最傻瓜、最浅显、真正手把手教!

程序员生活志

git

Docker的Image

陈磊@Criss

Kafka实战宝典:如何跨机房传输数据

数据社

大数据 kafka 跨机房

  • 扫码添加小助手
    领取最新资料包
现代应用性能管理深度概览_DevOps & 平台工程_Steven Haines_InfoQ精选文章