Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

YorkHwang/exec-timer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

10 Commits

Repository files navigation

Java Agent实现无代码侵入方法执行时长打印方案

一、背景

项目运行发现接口执行慢,排查主要在于找出哪些方法执行慢,一般需要打印方法执行时长的日志。通过对执行时长的日志观察对比,最终可找到慢的原因。

二、方案对比

方案 优势 劣势
System.currentTimeMillis()相减 简单 代码侵入且繁琐
StopWatch 简单且更加方便 代码侵入且繁琐
SpringAOP 实现统一按切面计算,较少侵入 私有和静态方法无法拦截
Java Agent 实现统一计算所有方法,零侵入 技术难度较高

从开发一个开发测试和排查问题工具角度出发,使用Java Agent技术实现,能够不修改任何业务代码的前提下(零侵入),对所有的业务代码里的任意方法做时长统计。 代码地址:https://github.com/YorkHwang/exec-timer

三、使用方法

  • 获取agent包 方式一:直接下载jar:exec-timer.jar

    方式二:自己打包: mvn clean package 在target目录下将生成对应的exec-timer.jar

  • 测试用例

VM加上如下参数

-javaagent:target/exec-timer.jar=@M-com.ayg.tools.test.AppTest$testApp||@C-com.ayg.tools.test.AppTest

执行测试用例 com.ayg.tools.test.AppTest.testApp()

  • Jar启动方式

javar -javaaget:[exec-timer.jar全路径]=@M|C|P-包全名|类全名$方法1,方法2...方法N -jar [可执行Jar的全路径]

示例: java -javaagent:/code/open/exec-timer/target/exec-timer.jar=@P-com.ayg.contract.service -jar contract-web.jar

  • 命令说明

a.指定类方法打印执行时长: @M-类全名$方法1,方法2 示例:@M-com.ayg.contract.service.ContractService$addContract,updateContract

b.指定类所有方法打印执行时长: @C-类全名 示例:@C-com.ayg.contract.service.ContractService

c.指定包下所有类所有方法打印执行时长: @P-包名 示例:@M-com.ayg.contract.service

多个命令用双竖线||间隔

About

基于java agent实现无侵入方法执行时长打印

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

Languages

AltStyle によって変換されたページ (->オリジナル) /