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

许多开发人员都很熟悉墨菲法则的一个例子:他们发现在花费了大量时间确保应用程序在开发环境中 快速和灵活之后,在发布到生产环境的时候性能会不可思议的大幅下降。更糟糕的是,应用程序平时运行 正常,老板或者重要客户操作应用的时候却反应缓慢。详细的日志记录和分析对于追踪这些间歇性的性能 瓶颈尤为重要。

然而,当今世界充满了面向服务的架构和分布式的应用,查找性能瓶颈对应的组件极其困难。考虑一 个典型Web 2.0风格应用的服务器端的常见场景:

服务器接收一个Web请求,分发给负责产生响应的组件。

该请求也许需要通过LDAP服务器进行安全验证。

控制器组件对数据库执行查询。

控制器组件也会调用第三方Web服务。

控制器组件将所有获得的数据进行汇总,组成一系列业务对象用于显示。

业务对象被展现,响应内容传回用户浏览器。

运行于浏览器的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 timed
log.info("ms for block n was: " + (System.currentTimeMillis() -  start));

但是很快,这些开发人员发现他们需要更多的信息,综合的性能统计数据如平均、最小、最大、标准 差和特定时间段内每秒的事务处理量。他们希望将这些数据绘成实时图表监控运行服务器上的问题,或者 通过JMX输出性能指标以便于启动监控器在性能下降的情况下发出警报。此外,他们还希望计时语句可以 和类似 log4j的框架配合使用。

时间: 2024-11-29 20:02:12

使用Perf4J进行性能分析和监控的相关文章

如何使用VisualVM进行性能分析及调优

概述 开发大型 Java 应用程序的过程中难免遇到内存泄露.性能瓶颈等问题,比如文件.网络.数据库的连接未 释放,未优化的算法等.随着应用程序的持续运行,可能会造成整个系统运行效率下降,严重的则会造成系统崩溃.为了找 出程序中隐藏的这些问题,在项目开发后期往往会使用性能分析工具来对应用程序的性能进行分析和优化. VisualVM 是一款免费的性能分析工具.它通过 jvmstat.JMX.SA(Serviceability Agent)以及 Attach API 等 多种方式从程序运行时获得实时数

使用 VisualVM 进行性能分析及调优

概述 开发大型 Java 应用程序的过程中难免遇到内存泄露.性能瓶颈等问题,比如文件.网络.数据库的连接未释放,未优化的算法等.随着应用程序的持续运行,可能会造成整个系统运行效率下降,严重的则会造成系统崩溃.为了找出程序中隐藏的这些问题,在项目开发后期往往会使用性能分析工具来对应用程序的性能进行分析和优化. VisualVM 是一款免费的性能分析工具.它通过 jvmstat.JMX.SA(Serviceability Agent)以及 Attach API 等多种方式从程序运行时获得实时数据,从

KeLiu版GPSR协议协议能正常进行性能分析吗?

问题描述 KeLiu版GPSR协议协议能正常进行性能分析吗? KeLiu版GPSR协议协议能正常进行性能分析吗?发现存在节点位置信息不更新的问题. 解决方案 Leach协议性能分析(1)性能测试之协议分析性能测试之协议分析

Ubuntu下使用Java visualVM对Java程序进行性能分析

使用Java visualVM的原因: 体积小,不耗内存,操作简单,功能全.关于Java visualVM和其他性能测试工具的比较,网上有很多文章,去搜搜看吧. 1. 在服务器上配置jstatd的security policy文件. jstatd是一个监控JVM(Java Virtual Machine,Java虚拟机)从创建到销毁过程中资源占用情况,并提供远程监控接口的RMI(Remote Method Invocation,远程方法调用)服务程序,它是一个Deamon程序,要保证远程监控软件

java开发中如何使用JVisualVM进行性能分析_java

JVisualVM是由Sun提供的性能分析工具,如此强大的后盾怎能不强大?在Jdk6.0以后的版本中是自带的,配置好环境变量然后在运行中输入"JVisualVm"或直接到Jdk的安装目录的Bin目录下找到运行程序即可运行.如果是用Jdk1.5或以前版本的朋友就得要单独安装了. 我觉得其还有一个强大的地方就是不需要用代理启动(即如果要监视某个程序则需要用测试软件来运行程序方便其监视如YourKit这款同类的测试工具)的方式来运行,十分方便,只要是用Jdk环境运行的,打开此测试工具后即能看

使用IBM Rational Performance Tester: 监控应用程序,第1部分

简介:了解在性能测试中应用程序监控为什么重要,以及如何使用 IBM Rational Performance Tester 来进行应用程序监控.本文是一个三部分 系列文章的第 1 部分,描述了以下技术:应用程序监控,端到端的业务事务 Application Response Measurement (ARM)标准,以及如何配置 IBM WebSphere Application Server 或 BEA WebLogic Application Server 的环境. 这个应用程序监控系列的其余

非侵入式监控PHP应用性能监控分析

前言 所谓非侵入式监控PHP应用性能,就是不修改现有系统代码,而对系统进行监控.这样的系统才能更容易的应用到PHP应用中.这里抛砖引玉,欢迎大家交流. 方案一 如果只是监控每次请求的访问时间.直接检测nginx的日志即可.在nginx的日志中有两个选项.$request_time 和 $upstream_response_time . 这两个选项记录了响应时间. 1.$request_time 指的就是从接受用户请求的第一个字节到发送完响应数据的时间,即包括接收请求数据时间.程序响应时间.输出响

mongodb监控

1.mongosniff工具 首先了解一下sniffer的概念,百度百科解释:Sniffer,中文可以翻译为嗅探器,是一种基于被动侦听原理的网络分析方式.使用这种技术方式,可以监视网络的状态.数据流动情况以及网络上传输的信息. sniffer既可以被犯罪分子利用进行违法活动,也可以被网络管理员利用来进行网络系统的维护和故障排除.目前,它已经被广泛应用于网络故障诊断.协议分析.应用性能分析和网络安全保障等各个领域. Mongodb提供了一个sniffer工具:mongosniff,这个工具可以从底

第三篇——第二部分——第六文 监控SQL Server镜像

原文:第三篇--第二部分--第六文 监控SQL Server镜像   原文出处:http://blog.csdn.net/dba_huangzj/article/details/26846203   要优化,首先要监控,看看是否有性能问题,如果有,在哪里.才能开始真正的优化,所以本文以监控为入口,在上一篇已经略微提供了一些监控方面的信息 针对监控部分,本文将介绍以下内容: 监控组件 警告阈值 数据库镜像监视器 关于镜像的系统存储过程 性能计数器   1.1. 监控组件: 数据库镜像状态表: 数据