使用Perf4J进行性能分析和监控

使用Perf4J进行性能分析和监控

ID:40228527

大小:97.50 KB

页数:9页

时间:2019-07-27

使用Perf4J进行性能分析和监控_第1页
使用Perf4J进行性能分析和监控_第2页
使用Perf4J进行性能分析和监控_第3页
使用Perf4J进行性能分析和监控_第4页
使用Perf4J进行性能分析和监控_第5页
资源描述:

《使用Perf4J进行性能分析和监控》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、使用Perf4J进行性能分析和监控许多开发人员都很熟悉墨菲法则的一个例子:他们发现在花费了大量时间确保应用程序在开发环境中快速和灵活之后,在发布到生产环境的时候性能会不可思议的大幅下降。更糟糕的是,应用程序平时运行正常,老板或者重要客户操作应用的时候却反应缓慢。详细的日志记录和分析对于追踪这些间歇性的性能瓶颈尤为重要。然而,当今世界充满了面向服务的架构和分布式的应用,查找性能瓶颈对应的组件极其困难。考虑一个典型Web2.0风格应用的服务器端的常见场景:1.服务器接收一个Web请求,分发给负责产生响应的组件。2.该请求

2、也许需要通过LDAP服务器进行安全验证。3.控制器组件对数据库执行查询。4.控制器组件也会调用第三方Web服务。5.控制器组件将所有获得的数据进行汇总,组成一系列业务对象用于显示。6.业务对象被展现,响应内容传回用户浏览器。7.运行于浏览器的AJAX代码产生其他的请求,与服务器端交互。对于“为何我的网页反应迟钝?”这样问题的回答需要研究多个组件和执行路径,同时需要生产环境中所有应用组件的详细性能数据。Perf4J是一款开源工具包,用于添加Java服务器端计时代码、记录日志和监控结果。对于熟悉诸如log4j日志框架的开

3、发人员来说,可以这样类比:Perf4JistoSystem.currentTimeMillis()aslog4jistoSystem.out.println()如何利用这个类比理解Perf4J呢?回想一下过去还没有广泛应用Java日志记录框架的糟糕岁月,我们大多数人如何添加日志记录语句。我们使用System.out.println()作为一种“简陋的调试器”,利用这种快捷但糟糕的方式记录信息。我们很快意识到,这是不够的。我们希望把记录语句输出到专门的日志文件中(如果可能的话,多个不同文件),也许可以每天覆盖日志。我们

4、需要能够设定重要性的不同级别以输出不用的日志语句,可以选择在不改变代码的情况下在特定环境下只输出特定日志,或者在不同环境中改变日志格式。因此,log4j提供的丰富功能来源于原始想法,是一种“更好的”System.out.println()日志语句。类似的,当Java新手发现他们需要添加性能监控代码时,他们经常这样做:longstart=System.currentTimeMillis();//executetheblockofcodetobetimedlog.info("msforblocknwas:"+(Syste

5、m.currentTimeMillis()-start));但是很快,这些开发人员发现他们需要更多的信息,综合的性能统计数据如平均、最小、最大、标准差和特定时间段内每秒的事务处理量。他们希望将这些数据绘成实时图表监控运行服务器上的问题,或者通过JMX输出性能指标以便于启动监控器在性能下降的情况下发出警报。此外,他们还希望计时语句可以和类似log4j的框架配合使用。Perf4J的目标是通过易于集成(和扩展)的开源软件包提供这些功能。Per4J是由Homeaway.com开发的,其基础设施的分布式特性和网站的高可用性及性

6、能需求需要深入的性能分析。Perf4J的特点包括:·简洁的stopwatch计时机制。·提供命令行工具,从原始的日志文件中生成汇总的统计数据和性能图表。·定制的log4jappender,可以在运行时应用中生成数据和图表,计划在以后的版本中支持java.util.logging和logback。·能够以JMX属性的形式发布性能数据,在数据超过指定阈值时发送通知。·提供@Profiled注解和一套自定义机制,允许在与AOP框架(如AspectJ或者SpringAOP)集成时巧妙的计时。下面的例子展现了如何轻松利用这些功

7、能。可以通过Perf4J开发人员指南来了解集成Perf4J的详细信息。利用StopWatch类开发计时代码org.perf4j.LoggingStopWatch类用于在代码中添加计时语句并打印到标准输出或者日志文件中:StopWatchstopWatch=newLoggingStopWatch();//...executecodeheretobetimedstopWatch.stop("example1","custommessagetext");对stop()方法的调用记录了执行时间并打印日志信息。默认情况下,基类

8、LoggingStopWatch将输出打印到System.err流中。但是大多数情况下,你需要使用一个集成到现有Java日志框架(如Log4JStopWatch、CommonsLogStopWatch或者Slf4JStopWatch)的子类。下面是一些stopwatch的输出示例:start[1233364397765]time[499]tag

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。