# jmethod-agent **Repository Path**: t0mZ/jmethod-agent ## Basic Information - **Project Name**: jmethod-agent - **Description**: java方法运行时长统计工具,基于javaassist - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-12-15 - **Last Updated**: 2022-08-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: javaassist, Java ## README Java 方法耗时分析工具 - - 原理 ```markdown 使用javaassist对字节码加载时在进行修改, 在方法前后插入代码统计方法执行时长。 ``` - 环境 ```markdown >= jdk1.8 ``` - 使用方式 ```markdown 1. jvm参数 -javaagent:F:\workspace\jmethod-agent-1.0.jar 默认搜索classpath根目录内文件名为jma.properties的配置文件 2. jvm参数指定配置文件(配置文件不位于classpath下) -javaagent:F:\workspace\jmethod-agent-1.0.jar=C:\Users\tom\Downloads\abc.properties 3. idea/Eclipse中 run/debug -> edit configuration -> VM Options 增加参数 -javaagent:jmethod-agent-1.0.jar ``` - jma.properties配置文件内容示例 ```markdown # 统计类MainTest的m1,m2方法耗时 tom.test.MainTest=m1,m2 # 只打印执行超过1秒的方法耗时信息 jma.cost.threshold=1000 ``` - 运行效果 ```markdown java project: *2021-12-15T16:33:49.602 JMA [main] tom.jma.MethodPerfTransformer.(MethodPerfTransformer.java:48) - Found 'jma.properties' file in local classpath *2021-12-15T16:33:49.637 JMA [main] tom.jma.MethodPerfTransformer.transform(MethodPerfTransformer.java:75) - Find transfer bytecode class: tom.test.MainTest *2021-12-15T16:33:49.822 JMA [main] tom.test.MainTest.m1(MainTest.java) - Method: m1 time-cost: 100ms *2021-12-15T16:33:50.023 JMA [main] tom.test.MainTest.m2(MainTest.java) - Method: m2 time-cost: 201ms tomcat(spring): 2021-12-15 16:35:51 [RMI TCP Connection(3)-127.0.0.1] INFO org.springframework.web.servlet.DispatcherServlet - Initializing Servlet 'spring' *2021-12-15T16:35:51.804 JMA [RMI TCP Connection(3)-127.0.0.1] org...AbstractApplicationContext.prepareRefresh(AbstractApplicationContext.java) - Method: prepareRefresh time-cost: 0ms *2021-12-15T16:35:52.063 JMA [RMI TCP Connection(3)-127.0.0.1] org....AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java) - Method: obtainFreshBeanFactory time-cost: 259ms *2021-12-15T16:35:52.063 JMA [RMI TCP Connection(3)-127.0.0.1] org...AbstractApplicationContext.prepareBeanFactory(AbstractApplicationContext.java) - Method: prepareBeanFactory time-cost: 0ms ``` - 参考资料 - [javassist](http://www.javassist.org/tutorial/tutorial.html) - [blog](https://www.cnblogs.com/chiangchou/p/javassist.html#_label0_1)