使用注解记录方法执行耗时

介绍各个系统都在追求性能,要做压力测试。压力测试目的是要找到热点,性能瓶颈,然后解决它或者优化它,这边暂不讨论怎么解决和优化性能问题。如果不做大规模的性能测试,是否有其他方式在开发,单元测试和集成测试的时候就发现一些性能问题呢?我个人比较喜欢在编码的各个阶段都去注意性能问题,并不希望在把问题留到大规模性能测试之后再发现。那样费时费力,在解决性能瓶颈和发现下一个性能瓶颈的过程中来来回回,压力测...
摘要由CSDN通过智能技术生成

介绍

各个系统都在追求性能,要做压力测试。

压力测试目的是要找到热点,性能瓶颈,然后解决它或者优化它,这边暂不讨论怎么解决和优化性能问题。如果不做大规模的性能测试,是否有其他方式在开发,单元测试和集成测试的时候就发现一些性能问题呢?

我个人比较喜欢在编码的各个阶段都去注意性能问题,并不希望在把问题留到大规模性能测试之后再发现。那样费时费力,在解决性能瓶颈和发现下一个性能瓶颈的过程中来来回回,压力测试的同学在叹气,开发的同学在抓头。

不说废话了。进入正题。假设我们能够通过DB查询出系统中各个方法的执行时间,那运用各种group byorder by。就能轻松知道当前系统的状态,有可能产生的瓶颈。不仅如此,还能清楚知道每一笔交易,对各个方法的执行次数。是否有大量不必要的循环等等。参考下表。

CREATE TABLE
    service_method_record
    (
        id bigint NOT NULL AUTO_INCREMENT,
        access_jnl CHAR(32), 					--流水号
        start_time TIMESTAMP NULL,		--开始时间
        end_time TIMESTAMP NULL,			--结束时间
        method_name VARCHAR(100),			--方法名称
        use_time INT,									--用时多久,毫秒
        env_name VARCHAR(20),					--环境名字,DEV,UAT,版本机等
        PRIMARY KEY (id)
    )
    ENGINE=InnoDB DEFAULT CHARSET=utf8;

系统中方法太多,还有各种工具方法,根本没必要统计。如果在某个方法上给个注解@LogMethodTime,这样就表示要统计这个方法的调用时长。岂不是美滋滋。

使用Aspect做面向切面,拦截方法并且在方法入口和出口做时间统计操作。

看下示意图:

记录方式

1.可以记录到日志中,这样性能消耗比较小

2.可以记录到DB中,但是性能消耗比较大,建议使用消息队列做异步记录。

记录到日志中
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值