写点什么

使用 Perf4j 简化应用分析

  • 2009-02-20
  • 本文字数:1113 字

    阅读完需:约 4 分钟

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

2009-02-20 20:012955
用户头像

发布了 88 篇内容, 共 262.3 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

架构师训练营第二周框架设计学习总结

Geek_xq

使用 Go 实现 Async/Await 模式

Roc

channel goroutines Async Go 语言

三万字无坑搭建基于Docker+K8S+GitLab/SVN+Jenkins+Harbor持续集成交付环境!!

冰河

Docker 云原生 k8s

【薪火计划】06 - 你推崇的领导方式是怎么样的?

AR7

管理

二分发代码模板

小兵

JVM调优不知道怎么回答,阿里总结四大模块,学不会就背过来

小Q

Java 学习 架构 面试 JVM

《华为数据之道》读书笔记:第 7章 打造“数字孪生”的数据全量感知能力

方志

数据中台 数字化转型

监控之美——监控系统选型分析及误区探讨

华章IT

运维 云原生 监控 Prometheus

第六周作业

Griffenliu

第六周学习总结

Griffenliu

一枚程序猿的MacBook M1详细体验报告

Zhendong

Spock单元测试框架实战指南四 - 异常测试

Java老k

单元测试 spock

区块链开发落地,联盟链系统平台搭建

t13823115967

区块链 区块链开发落地 联盟链系统平台搭建

顶层设计已基本完备 数字货币将进入加速推进阶段

CECBC

数字货币

免费下载O’Reilly出版社全新之作《建立机器学习流水线》

计算机与AI

学习

Arthas 实践——生产环境排查 CPU 飚高问题

阿里巴巴云原生

开源 云原生 中间件 Java 25 周年 Arthas

利用 Arthas 解决启动 StandbyNameNode 加载 EditLog 慢的问题

阿里巴巴云原生

阿里云 开源 云原生 中间件 Java 25 周年

区块链如何助力精准扶贫?

CECBC

区块链 扶贫

我是如何使计算提速>150倍的

白日梦想家

Python 代码优化 Numpy

架构师训练营第 1 期 - 第 10 周 - 学习总结

wgl

极客大学架构师训练营

CPU飙高问题排查

程序猿玄微子

区块链政务系统开发解决方案

t13823115967

区块链+ 区块链开发落地 政务系统开发解决方案

Scala语法特性(三):面向对象的独特点

正向成长

特质 样例类 case class Traits

面试无忧:源码+实践,讲到MySQL调优的底层算法实现

小Q

Java 数据库 学习 面试 算法

聊聊销售背后的策略

吴晨曦

创业 销售管理

Spring 源码学习 02:关于 Spring IoC 和 Bean 的概念

程序员小航

spring 源码 源码分析 ioc

数字货币——货币的第四次革命

CECBC

数字货币

Nginx的反向代理与负载均衡--配置Nginx

Linux服务器开发

nginx 负载均衡 反向代理 后端 Linux服务器

甲方日常 59

句子

工作 随笔杂谈 日常

磁盘到底是怎样工作的?一文理解硬盘结构

Guanngxu

操作系统

《华为数据之道》读书笔记:第 6 章 面向“自助消费”的数据服务建设

方志

数据中台 数据仓库 数字化转型 数据治理

使用Perf4j简化应用分析_Java_Ian Roughley_InfoQ精选文章