日前要对负责一老系统做性能调优 。首先希望能够通过采样对线上的方法的一个性能情况做一个了解 。于是想到了之前接触过得perf4j 。 工具本身就不做过多的说明了。 主要讲下在这个过程中的一个思路 。perf4j主要有几种使用方法
1 . 简单的利用stopWatch对系统方法做监控 .
public static void main(String args[]){
StopWatch stopWatch = new Log4JStopWatch("getMessage()");
new Perf4jStep().getMessage(10000, 1) ;
stopWatch.stop();
}
通过上面代码,可以在日志文件中看到
2011-07-29 14:41:55,498 INFO perf4j.TimingLogger - start[1311921714859] time[639] tag[getMessage()]
其中tag[getMessage()]表明监控的方法名 , start[1311921714859]表示执行该方法的开始时间, time[639]表示执行该方法的消耗时间 。这样就能实现一个简单的性能数据采样了 。当然,我并没有采用该方式,因为对系统代码有比较强的侵入性, 必须在每个业务方法内写入类似的代码。 于是 ,我查了下perf4j的官网,找到了更方便好用的第二种途径
2. 利用自带的annonation 结合aop实现对方法的监控
首先对待监控的方法打上@Profiled的标注
@Profiled(tag = "getMessage")
public Object getMessage(int n , int sw){
do biz ...
然后,把系统的aop 打开
<!-- 使用annotation定义Asepct -->
<aop:aspectj-autoproxy proxy-target-class="true" />
<!-- 配置执行perf4j的Aspect -->
<bean id="timingAspect" class="org.perf4j.log4j.aop.TimingAspect" />
最后在log4j的配置文件中定义perf4j的appender 和logger
<logger name="org.perf4j.TimingLogger" additivity="false">
<level value="INFO"/>
<appender-ref ref="perf4jFileAppender"/>
</logger>
<appender name="perf4jFileAppender" class="org.apache.log4j.FileAppender">
<param name="File" value="logs/perfStats.log"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p %c{2} - %m%n"/>
</layout>
</appender>
这样在getMessage方法在被调用时 ,将能够在日志中查到对应的响应时间信息,格式跟第一种方式的类似 。 看到这里, 肯定会有人要问, 这跟我通过切面对要监控的方法做System.currentTimeMillis() 有什么区别吗 ?其实 ,之所以使用perf4j还因为它强大的报表功能 。
1. 它能够通过自身的logPaser对日志做分析,并形成报表, 在命令行输入
java -jar perf4j-0.9.13.jar perfStats.log (默认是以30秒为时间片对日志做分析)那么 ,将会格式化成如下报表
Performance Statistics 20:32:00 - 20:32:30
Tag Avg(ms) Min Max Std Dev Count
getMessage 249.4 2 487 151.3 37
Performance Statistics 20:32:30 - 20:33:00
Tag Avg(ms) Min Max Std Dev Count
getMessage 120 4 556 151.3 43
另外, perf4j 也能够通过配置类似CoalescingStatistics 的appender来自动解析日志并形成报表(即通过跟log4j的整合, 不需要手工运行生成报表命令,自动形成报表) 。可以注意下 CoalescingStatistics, JmxAttributeStatisticsAppender, GraphingStatisticsAppender 这三个元素 ,可以通过他们可以有很多扩展的功能可以使用(包括tps 报表)
另外, 注意下 。 数据采样如果在线上当日常日志来处理的话, 担心对性能造成一定的影响。 所以 ,将会通过jmx 的形式来控制perf4j的开关。 举个例子 ,当我需要采样时 ,通过jmx 修改perf4j 的logger 的日志级别来达到 。特别指出 , 在JmxAttributeStatisticsAppender中perf4j是支持设置阙值的, 可以设定阙值来决定是否对jmx发送数据。
分享到:
相关推荐
《数据库性能调优--原理与技术》是一本深入探讨数据库性能优化的专业书籍,旨在帮助读者理解和掌握提升数据库系统效率的关键技术和方法。通过学习本书,读者能够有效地解决在实际工作中遇到的数据库性能问题,提高...
#### 三、性能监控与诊断 **1. 监控工具** - **AWR报告**:自动工作负载仓库(Automatic Workload Repository)提供了全面的性能指标和历史趋势数据,帮助DBA快速定位问题根源。本书详细解释了如何解读AWR报告以及...
针对数据库性能监控和调优,市面上有许多成熟的工具可供选择。例如,MySQL自带的慢查询日志功能可以帮助开发者发现执行时间较长的SQL语句;Percona Toolkit则提供了一系列用于数据库性能分析和管理的实用工具。 ###...
数据库性能调优是IT领域中的一个关键话题,尤其是在大数据时代,高效、稳定的数据处理能力直接影响着业务的运行效率。这个压缩包文件“数据库性能调优--原理与技术”很可能包含了关于如何优化数据库性能的深入讲解和...
### 数据库性能调优——原理与技术(Oracle) #### 一、引言 在当今数据驱动的世界里,数据库系统的性能直接影响着企业的业务效率和用户体验。《数据库性能调优——原理与技术1.pdf》主要针对Oracle数据库,深入...
### 数据库性能调优——原理与技术 在当今数字化时代,数据成为了企业最宝贵的资产之一。随着业务量的增长和技术的发展,数据库系统面临着越来越大的压力。为了确保数据处理的速度和效率,进行有效的数据库性能调优...
### AIX性能调优知识点详解 #### 一、AIX简介及内部结构 AIX(Advanced Interactive Executive)是由IBM开发的一款基于Unix的操作系统,专为IBM的Power Systems服务器设计。AIX以其高度的安全性、稳定性和灵活性而...
标题“AIX性能调优-牛新庄”指向了专门针对AIX操作系统进行性能调优的技术内容,AIX是IBM开发...在进行这些操作时,一个系统性的性能调整流程是必要的,这通常包括性能监控、问题诊断、调整措施实施和效果评估等步骤。
### 大型数据库应用的性能调优-案例学习 #### 引言 本文档通过一个具体的案例——PeopleSoft系统的性能优化,深入探讨了如何确保关键业务应用在大型数据库环境下的高性能运行。虽然本案例主要针对的是PeopleSoft与...
Oracle 10g版本引入了一个重要的性能监控工具——Automatic Workload Repository(AWR),它是数据库管理员进行性能优化的重要参考。AWR通过定期捕获数据库的状态快照(snapshot),然后对比这两段时间内的数据,...
* 使用 Oracle 的性能监控工具,例如 Oracle Enterprise Manager 等。 八、结论 * 本文详细介绍了在 Linux 环境下安装 Oracle 10g 的方法,并对 Oracle 性能调优进行了详细的说明。 * 了解 Oracle 的基本概念、...
DB2性能调优是数据库管理中的重要环节,它关乎到系统的响应速度、资源利用率和整体应用性能。牛新庄在这一领域有深厚的经验,他的分享对于学习和掌握DB2优化技术具有很高的价值。 DB2优化器是DB2数据库管理系统的...
【标题】:“通向架构师的道路(第四天)之Tomcat性能调优-让小猫飞奔.docx” 【描述】:本篇文档是关于如何优化Apache Tomcat以提升其性能,使它能够处理更高的并发用户量并实现性能显著提升的技术指南。作者提到...
Linux系统性能调优是针对Linux操作系统进行的一系列优化措施,以提升系统运行效率、稳定性和资源利用率。在本文中,我们将深入探讨Linux的核心组件、监控工具、性能瓶颈分析及优化策略。 1. **理解Linux操作系统** ...
【性能调优--0:前言】 性能调优是一个针对软件系统进行的持续改进过程,旨在提高系统的效率、响应速度和资源利用率。在J2EE应用中,性能问题可能导致用户体验下降,甚至影响整个系统的稳定性和可扩展性。性能调优...
3. **VisualVM**:集成了多种JDK自带工具,提供丰富的性能监控和诊断功能。 五、总结 JVM内存模型和优化是Java性能调优的核心部分,理解并熟练掌握这些知识,能够帮助开发者解决实际问题,提升系统的运行效率。...
在Java性能调优中,JVM(Java Virtual Machine)创建对象和内存分配是至关重要的环节。这直接影响到程序的运行速度、内存占用以及整体系统的稳定性。本篇文章将深入探讨Java中对象创建的过程、内存分配机制,以及...
一般我们使用这个脚本来监控当前数据库正在发生的活动,这有助于我们对数据库性能进行调优。 使用方法:sh getevmon.sh dbname outputfile 60 #dbname:要监控的数据库实例名 #outputfile:输出文件名,自定义 #60:...
《JVM性能调优——JVM内存整理及GC回收》是针对Java开发人员的重要主题,尤其是在大型企业级应用中,确保JVM(Java虚拟机)的高效运行是至关重要的。本资料深入探讨了如何通过调整JVM内存设置和优化垃圾回收机制来...
本文将深入探讨两个重要的垃圾收集器——ParNew和Concurrent Mark Sweep (CMS) ——以及它们在JVM性能调优中的作用,特别是基于三色标记算法的实现。 首先,ParNew垃圾收集器是新生代(Young Generation)的默认...