性能调优-性能监控

日前要对负责一老系统做性能调优 。首先希望能够通过采样对线上的方法的一个性能情况做一个了解 。于是想到了之前接触过得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发送数据。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值