Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
matrix-sample
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
mall
arch
matrix-sample
Commits
3c2ea562
Commit
3c2ea562
authored
Sep 02, 2019
by
QIANGLU
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add demo
parent
a97f2d37
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
102 additions
and
24 deletions
+102
-24
pom.xml
spring-boot-agent/pom.xml
+22
-23
AgentStartup.java
spring-boot-agent/src/main/java/com/qianglu/agent/AgentStartup.java
+2
-1
PerformMonitorTransformer.java
spring-boot-agent/src/main/java/com/qianglu/agent/service/PerformMonitorTransformer.java
+78
-0
No files found.
spring-boot-agent/pom.xml
View file @
3c2ea562
...
@@ -21,29 +21,9 @@
...
@@ -21,29 +21,9 @@
<dependencies>
<dependencies>
<dependency>
<dependency>
<groupId>
com.secoo.mall
</groupId>
<groupId>
javassist
</groupId>
<artifactId>
secoo-log-starter
</artifactId>
<artifactId>
javassist
</artifactId>
</dependency>
<version>
3.11.0.GA
</version>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-test
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-web
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-aop
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-autoconfigure
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-actuator
</artifactId>
</dependency>
</dependency>
</dependencies>
</dependencies>
...
@@ -68,6 +48,25 @@
...
@@ -68,6 +48,25 @@
<target>
${java.version}
</target>
<target>
${java.version}
</target>
</configuration>
</configuration>
</plugin>
</plugin>
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-shade-plugin
</artifactId>
<executions>
<execution>
<phase>
package
</phase>
<goals>
<goal>
shade
</goal>
</goals>
</execution>
</executions>
<configuration>
<artifactSet>
<includes>
<include>
javassist:javassist:jar:
</include>
</includes>
</artifactSet>
</configuration>
</plugin>
</plugins>
</plugins>
</pluginManagement>
</pluginManagement>
...
...
spring-boot-agent/src/main/java/com/qianglu/agent/AgentStartup.java
View file @
3c2ea562
...
@@ -2,6 +2,7 @@ package com.qianglu.agent;
...
@@ -2,6 +2,7 @@ package com.qianglu.agent;
import
com.qianglu.agent.service.DumpClassesService
;
import
com.qianglu.agent.service.DumpClassesService
;
import
com.qianglu.agent.service.PerformMonitorTransformer
;
import
java.lang.instrument.Instrumentation
;
import
java.lang.instrument.Instrumentation
;
...
@@ -13,5 +14,5 @@ public class AgentStartup {
...
@@ -13,5 +14,5 @@ public class AgentStartup {
public
static
void
premain
(
String
arg
,
Instrumentation
instrumentation
)
{
public
static
void
premain
(
String
arg
,
Instrumentation
instrumentation
)
{
System
.
err
.
println
(
"agent startup , args is "
+
arg
);
System
.
err
.
println
(
"agent startup , args is "
+
arg
);
// 注册我们的文件下载函数
// 注册我们的文件下载函数
instrumentation
.
addTransformer
(
new
DumpClassesService
());
}
instrumentation
.
addTransformer
(
new
PerformMonitorTransformer
());
}
}
}
spring-boot-agent/src/main/java/com/qianglu/agent/service/PerformMonitorTransformer.java
0 → 100644
View file @
3c2ea562
package
com
.
qianglu
.
agent
.
service
;
import
javassist.CannotCompileException
;
import
javassist.ClassPool
;
import
javassist.CtBehavior
;
import
javassist.CtClass
;
import
javassist.expr.ExprEditor
;
import
javassist.expr.MethodCall
;
import
java.lang.instrument.ClassFileTransformer
;
import
java.lang.instrument.IllegalClassFormatException
;
import
java.security.ProtectionDomain
;
import
java.util.HashSet
;
import
java.util.Set
;
/**
* 测试
*
* @author QIANGLU on 2019-09-02
*/
public
class
PerformMonitorTransformer
implements
ClassFileTransformer
{
private
static
final
Set
<
String
>
classNameSet
=
new
HashSet
<>();
static
{
classNameSet
.
add
(
"com.example.demo.AgentTest"
);
}
@Override
public
byte
[]
transform
(
ClassLoader
loader
,
String
className
,
Class
<?>
classBeingRedefined
,
ProtectionDomain
protectionDomain
,
byte
[]
classfileBuffer
)
throws
IllegalClassFormatException
{
try
{
String
currentClassName
=
className
.
replaceAll
(
"/"
,
"."
);
if
(!
classNameSet
.
contains
(
currentClassName
))
{
// 仅仅提升Set中含有的类
return
null
;
}
System
.
out
.
println
(
"transform: ["
+
currentClassName
+
"]"
);
CtClass
ctClass
=
ClassPool
.
getDefault
().
get
(
currentClassName
);
CtBehavior
[]
methods
=
ctClass
.
getDeclaredBehaviors
();
for
(
CtBehavior
method
:
methods
)
{
enhanceMethod
(
method
);
}
return
ctClass
.
toBytecode
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
null
;
}
private
void
enhanceMethod
(
CtBehavior
method
)
throws
Exception
{
if
(
method
.
isEmpty
())
{
return
;
}
String
methodName
=
method
.
getName
();
if
(
methodName
.
equalsIgnoreCase
(
"main"
))
{
// 不提升main方法
return
;
}
final
StringBuilder
source
=
new
StringBuilder
();
source
.
append
(
"{"
)
.
append
(
"long start = System.nanoTime();\n"
)
// 前置增强: 打入时间戳
.
append
(
"$_ = $proceed($$);\n"
)
// 保留原有的代码处理逻辑
.
append
(
"System.out.print(\"method:["
+
methodName
+
"]\");"
).
append
(
"\n"
)
.
append
(
"System.out.println(\" cost:[\" +(System.nanoTime() -start)+ \"ns]\");"
)
// 后置增强
.
append
(
"}"
);
ExprEditor
editor
=
new
ExprEditor
()
{
@Override
public
void
edit
(
MethodCall
methodCall
)
throws
CannotCompileException
{
methodCall
.
replace
(
source
.
toString
());
}
};
method
.
instrument
(
editor
);
}
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment