`
martinyuan
  • 浏览: 57247 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

使用Perf4j简化应用分析

阅读更多

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics