BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

使用Perf4j简化应用分析

| 作者 Ian Roughley 关注 0 他的粉丝 ,译者 张龙 关注 14 他的粉丝 发布于 2009年2月21日. 估计阅读时间: 4 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

如果想分析Java应用,有很多工具可供选择——但你想过分析应用可以像添加日志那么简单么?这就是Perf4j项目的目标所在:

如同log4j类似于System.out.println()一样,Perf4J类似于System.currentTimeMillis()。
Perf4J提供的很多特性都令人耳目一新:
  • 用于计时的简单的停止观测(stop watch)机制。
  • 用于解析日志文件的命令行工具,可以生成聚合统计和性能图表
  • 轻松集成大多数常见的日志框架和门面:log4j、java.util.logging、Apache Commons Logging及SLF4J。
  • 客户化的log4j appenders,可以在应用运行时生成统计和图表(不久还会提供客户化的 java.util.logging处理器)。
  • 可以将性能统计暴露为JMX属性,当统计超出指定极限时发送通知。
  • 用于展现Web应用性能图表的Servlet。
  • 提供了@Profiled注解和一套客户化的方面(aspect),在处理AOP框架如AspectJ或Spring AOP时可以灵活插入计时语句。
  • 可扩展的架构

InfoQ有幸采访了Perf4j项目的领导者Alex Devine,他谈到了开发Perf4j的缘由:

在认识到性能跟踪和管理问题会严重影响到公司的每个项目(事实上会影响到几乎所有的基于服务器的、分布式应用)后,我们决定构建并开发一个标准的性能库,最后就诞生了Perf4J。

“Perf4j能解决哪些特殊的性能问题呢”?

Perf4J非常适合于分布式、面向服务的应用的性能问题跟踪。例如,用户点击Homeaway上的某个搜索页面后就会发出对Web服务器的一个调用,该Web服务器又会调用数据库,同时还会通过HTTP调用搜索服务和广告服务器。搜索服务本身会将各个搜索结点生成的结果聚合起来。如果在产品环境下性能出现了问题,我们可以通过Perf4j轻松快速的查明出问题的组件。

这导致了另一个问题“Perf4j可以用在产品环境中么?”

Perf4J明确定位于产品环境中。事实上,很多时候在每个阶段上一切都很好,但放到了产品环境下就会出现各种问题,在出现大的性能问题前就提早做好准备对于问题的跟踪是大有裨益的。

对于性能开销,Alex说到:

其开销与日志类似,就像在代码前后使用System.currentTimeMillis()并记录日志一样,你可以在通过开始和停止StopWatch来实现这一切。这样类似于日志,其花费最终取决于附加的appenders。AsyncCoalescingStatisticsAppender仅是将日志消息压入到队列中并由单独线程中downstread appenders的取出,这样当这些appenders完成处理后不会影响到主线程的执行时间。此外,如果通过加载时间(load-time)来使用@Profiled注解,你可以定义运行中所分析的方法,在这种情况下,那些不做分析的方法就无需任何额外的设置。

关于未来Alex说到:

我们想对那些没有StopWatch或@Profiled注解的方法也进行运行时分析。也就是说开发者可以在aop.xml或Spring配置文件中指定要分析的方法。这样就可以分析第三方库(他们并不知道Perf4J),而且无需在源代码中使用分析语句了。

可以从 http://perf4j.org下载Perf4j。

查看英文原文:Profiling Just Got Easier With Perf4j

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

未来的方向 by Luo Michael

我们想对那些没有StopWatch或@Profiled注解的方法也进行运行时分析。也就是说开发者可以在aop.xml或Spring配置文件中指定要分析的方法。这样就可以分析第三方库(他们并不知道Perf4J),而且无需在源代码中使用分析语句了。

不知道最终能否实现在生产环境不重新编译,或者只修改配置文件或者使用jmx进行动态配置,剩下的由perf4j进行的话。如果做到这点的话,可以说是革命性的突破。可以解决很多只有在production环境而不在开发环境当中发生的问题。非常期待。

MyPerf4J by Lin Kang

Hi,我利用ASM写了一个简单、快速且无侵入的Java方法监控工具MyPerf4J,可以统计出方法的执行性能指标,包括RPS、Avg、TP50、TP90、TP99、TP999等,Github地址:github.com/ThinkpadNC5/MyPerf4J

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

2 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT