Skip to content

Commit 9e4a4a0

Browse files
attach jdk 11
1 parent 3aece64 commit 9e4a4a0

File tree

5 files changed

+75
-19
lines changed

5 files changed

+75
-19
lines changed

lib/tools.jar

17.5 MB
Binary file not shown.

pom.xml

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
<groupId>org.apache.maven.plugins</groupId>
1818
<artifactId>maven-compiler-plugin</artifactId>
1919
<configuration>
20-
<source>1.8</source>
21-
<target>1.8</target>
20+
<source>11</source>
21+
<target>11</target>
2222
</configuration>
2323
</plugin>
2424
<plugin>
@@ -67,14 +67,22 @@
6767
<version>3.2</version>
6868
</dependency>
6969

70-
<dependency>
70+
<!-- <dependency>
7171
<groupId>io.earcam.wrapped</groupId>
7272
<artifactId>com.sun.tools.attach</artifactId>
7373
<version>1.8.0_jdk8u131-b11</version>
7474
<scope>compile</scope>
7575
<type>jar</type>
76+
</dependency>-->
77+
<dependency>
78+
<groupId>com.sun</groupId>
79+
<artifactId>tools</artifactId>
80+
<version>1.8.0</version>
81+
<scope>system</scope>
82+
<systemPath>${project.basedir}/lib/tools.jar</systemPath>
7683
</dependency>
7784

85+
7886
<dependency>
7987
<groupId>org.slf4j</groupId>
8088
<artifactId>jcl-over-slf4j</artifactId>
@@ -90,4 +98,4 @@
9098

9199
</dependencies>
92100

93-
</project>
101+
</project>

src/main/java/com/guance/javaagent/Config.java

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ public class Config {
99

1010
private String agentJar;
1111

12+
private String pid;
13+
14+
private String displayName;
15+
1216
public String getOptions() {
1317
return this.options;
1418
}
@@ -21,17 +25,24 @@ public String getAgentJar() {
2125
return this.agentJar;
2226
}
2327

24-
private Config(String options,String downloadAddress,String agentJar){
28+
public String getPid(){return this.pid;}
29+
public String getDisplayName(){return this.displayName;}
30+
31+
private Config(String options,String downloadAddress,String agentJar,String pid,String displayName){
2532
this.options = options;
2633
this.downloadAddress = downloadAddress;
2734
this.agentJar = agentJar;
35+
this.pid = pid;
36+
this.displayName = displayName;
2837
}
2938

3039
static Config parse(String... args){
3140
String option = "";
3241
String downloadAddr= "";
3342
String currentArg = "";
3443
String agentJar= "";
44+
String pid = "";
45+
String displayName = "";
3546
for(String arg : args){
3647
if (arg.startsWith("-")){
3748
currentArg =arg;
@@ -46,6 +57,12 @@ static Config parse(String... args){
4657
case "-agent-jar":
4758
agentJar = arg;
4859
break;
60+
case "-pid":
61+
pid = arg;
62+
break;
63+
case "-displayName":
64+
displayName = arg;
65+
break;
4966
case "-h":
5067
case "-help":
5168
printOut();
@@ -54,18 +71,25 @@ static Config parse(String... args){
5471
}
5572
}
5673
}
57-
return new Config(option,downloadAddr,agentJar);
74+
return new Config(option,downloadAddr,agentJar,pid,displayName);
5875
}
5976
public static void printOut(){
6077
PrintStream out = System.out;
6178
out.println(" java -jar agent-attach-java.jar [-options <dd options>]");
6279
out.println(" [-agent-jar <agent filepath>]");
80+
out.println(" [-pid <pid>]");
81+
out.println(" [-displayName <service name/displayName>]");
6382
out.println(" [-h]");
6483
out.println(" [-help]");
6584
out.println(" [-options]:");
6685
out.println(" this is dd-java-agnet.jar env, example:");
67-
out.println(" dd.agent.port=9529,dd.agent.host=localhost,dd.service=serviceName");
86+
out.println(" dd.agent.port=9529,dd.agent.host=localhost,dd.service=serviceName,...");
6887
out.println(" [-agent-jar]:");
6988
out.println(" default is: /usr/local/ddtrace/dd-java-agent.jar");
89+
out.println(" [-pid]:");
90+
out.println(" service PID String");
91+
out.println(" [-displayName]:");
92+
out.println(" service name");
93+
out.println(" Note: -pid or -displayName must have a non empty !!!");
7094
}
7195
}

src/main/java/com/guance/javaagent/JavaAgentLoader.java

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,26 +12,52 @@ public class JavaAgentLoader {
1212

1313
private static final String jarFilePath = "/usr/local/ddtrace/dd-java-agent.jar";
1414

15-
public static void loadAgent(String agentJar ,String options) {
15+
public static void loadAgent(Config config) {
1616
logger.info("dynamically loading javaagent");
17-
logger.info("------------------options-------------"+options);
18-
logger.info("------------------agentJar-------------"+agentJar);
17+
logger.info("config.options:"+ config.getOptions());
18+
logger.info("config.agentJar: "+config.getAgentJar());
19+
logger.info("config.pid: "+config.getPid());
20+
logger.info("config.displayName: "+config.getDisplayName());
21+
boolean idMode = false;
22+
boolean nameMode= false;
23+
if (config.getPid() != null && !config.getPid().equals("")){
24+
idMode = true;
25+
}
26+
if (config.getDisplayName()!= null && !config.getDisplayName().equals("")){
27+
nameMode =true;
28+
}
29+
if (!idMode && !nameMode){
30+
logger.warn("-pid or -displayName must have a non empty");
31+
return;
32+
}
1933
try {
2034
List<VirtualMachineDescriptor> list = VirtualMachine.list();
2135
for (int i = 0; i < list.size(); i++) {
2236
VirtualMachineDescriptor virtualMachineDescriptor = list.get(i);
23-
String version = virtualMachineDescriptor.id();
24-
VirtualMachine attach = VirtualMachine.attach(version);
25-
if (agentJar != null && !agentJar.equals("")){
26-
attach.loadAgent(agentJar, options);
37+
String pid = virtualMachineDescriptor.id();
38+
logger.info(pid);
39+
// logger.info(virtualMachineDescriptor.displayName());
40+
VirtualMachine attach = null;
41+
if (idMode && config.getPid().equals(pid) ){
42+
attach = VirtualMachine.attach(pid);
43+
}
44+
if (nameMode && virtualMachineDescriptor.displayName().equals(config.getDisplayName())){
45+
attach = VirtualMachine.attach(pid);
46+
}
47+
if (attach == null){
48+
continue;
49+
}
50+
if (config.getAgentJar() != null && !config.getAgentJar().equals("")){
51+
attach.loadAgent(config.getAgentJar(), config.getOptions());
2752
}else {
28-
attach.loadAgent(jarFilePath, options);
53+
attach.loadAgent(jarFilePath, config.getOptions());
2954
}
3055
attach.detach();
3156
logger.info(String.format("attach agent into [%s]",virtualMachineDescriptor.displayName()));
57+
return;
3258
}
3359
} catch (Exception e) {
3460
throw new RuntimeException(e);
3561
}
3662
}
37-
}
63+
}

src/main/java/com/guance/javaagent/MyMainClass.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ public class MyMainClass {
1717
public static void main(String[] args) {
1818
Config config = Config.parse(args);
1919
// todo load agent ddtrace
20-
JavaAgentLoader.loadAgent(config.getAgentJar(),config.getOptions());
21-
logger.info("main method invoked with args: {}", Arrays.asList(args));
20+
JavaAgentLoader.loadAgent(config);
2221
}
23-
2422
}

0 commit comments

Comments
 (0)