InfoQ

InfoQ

新闻

我的书签

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

该内容已经被标记书签!

标记书签错误,请重试!

使用Perf4j简化应用分析

作者 Ian Roughley 译者 张龙 发布于 2009年2月20日

领域
架构 & 设计,
语言 & 开发
主题
性能和可伸缩性 ,
Java
标签
性能评估

如果想分析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

译者 张龙 热衷于编程,乐于分享,对新技术有强烈的探索欲,对Java轻量级框架有一定研究。

未来的方向 发表人 Luo Michael 发表于
  1. 返回顶部

    未来的方向

    发表人 Luo Michael

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

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

深度内容

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

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

特性注入:成功三部曲

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