【Jsp精品源码栏目提醒】:网学会员,鉴于大家对Jsp精品源码十分关注,论文会员在此为大家搜集整理了“【精品】使用Perf4J进行性能分析和监控 - 其它资料”一文,供大家参考学习!
使用 Perf4J 进行性能分析和监控许 多开发人员都很熟悉墨菲法则的一个例子:他们发现在花费了大量时间确保应用程序在开发环境中快速和灵活之后,在发布到生产环境的时候性能会不可思议的大幅 下降。
更糟糕的是,应用程序平时运行正常,老板或者重要客户操作应用的时候却反应缓慢。
详细的日志记录和分析对于追踪这些间歇性的性能瓶颈尤为重要。
然而,当今世界充满了面向服务的架构和分布式的应用,查找性能瓶颈对应的组件极其困难。
考虑一个典型 Web 2.0 风格应用的服务器端的常见场景: 1. 服务器接收一个 Web 请求,分发给负责产生响应的组件。
2. 该请求也许需要通过 LDAP 服务器进行安全验证。
3. 控制器组件对数据库执行查询。
4. 控制器组件也会调用第三方 Web 服务。
5. 控制器组件将所有获得的数据进行汇总,组成一系列业务对象用于显示。
6. 业务对象被展现,响应内容传回用户浏览器。
7. 运行于浏览器的 AJAX 代码产生其他的请求,与服务器端交互。
对于“为何我的网页反应迟钝?”这样问题的回答需要研究多个组件和执行路径,同时需要生产环境中所有应用组件的详细性能数据。
Perf4J 是一款开源工具包,用于添加 Java 服务器端计时代码、记录日志和监控结果。
对于熟悉诸如 log4j 日志框架的开发人员来说,可以这样类比: Perf4J is to System.currentTimeMillis as log4j is to System.out.println如何利用这个类比理解 Perf4J 呢?回想一下过去还没有广泛应用 Java 日志记录框架的糟糕岁月,我们大多数人如何添加日志记录语句。
我们使用System.out.println作 为一种“简陋的调试器”,利用这种快捷但糟糕的方式记录信息。
我们很快意识到,这是不够的。
我们希望把记录语句输出到专门的日志文件中(如果可能的话,多 个不同文件),也许可以每天覆盖日志。
我们需要能够设定重要性的不同级别以输出不用的日志语句,可以选择在不改变代码的情况下在特定环境下只输出特定日 志,或者在不同环境中改变日志格式。
因此,log4j 提供的丰富功能来源于原始想法,是一种“更好的 ”System.out.println日志语句。
类似的,当 Java 新手发现他们需要添加性能监控代码时,他们经常这样做:long start System.currentTimeMillis// execute the block of code to be timedlog.infoms for block n was: System.currentTimeMillis - start但是很快,这些开发人员发现他们需要更多的信息,综合的性能统计数据如平均、最小、最大、标准差和特定时间段内每秒的事务处理量。
他们希望将这些数 据绘成实时图表监控运行服务器上的问题,或者通过 JMX 输出性能指标以便于启动监控器在性能下降的情况下发出警报。
此外,他们还希望计时语句可以和类似 log4j的框架配合使用。
Perf4J 的目标是通过易于集成(和扩展)的开源软件包提供这些功能。
Per4J 是由Homeaway.com 开发的,其基础设施的分布式特性和网站的高可用性及性能需求需要深入的性能分析。
Perf4J 的特点包括: 简洁的 stop watch 计时机制。
提供命令行工具,从原始的日志文件中生成汇总的统计数据和性能图表。
定制的 log4j appender,可以在运行时应用中生成数据和图表,计划在以后 的版本中支持 java.util.logging 和 logback。
能够以 JMX 属性的形式发布性能数据,在数据超过指定阈值时发送通知。
提供Profiled 注解和一套自定义机制,允许在与 AOP 框架(如 AspectJ 或 者 Spring AOP)集成时巧妙的计时。
下面的例子展现了如何轻松利用这些功能。
可以通过 Perf4J 开发人员指南来了解集成 Perf4J 的详细信息。
利用 StopWatch 类开发计时代码org.perf4j.LoggingStopWatch 类用于在代码中添加计时语句并打印到标准输出或者日志文件中:StopWatch stopWatch new LoggingStopWatch//... execute code here to be timedstopWatch.stopexample1 custom message text对 stop方法的调用记录了执行时间并打印日志信