Skip to content

Commit 3de4e94

Browse files
authored
Merge pull request #356 from dromara/dev
optimize jvmti related
2 parents 1b8cf00 + 04a2cdd commit 3de4e94

File tree

7 files changed

+39
-21
lines changed

7 files changed

+39
-21
lines changed

adapter/adapter-brpc/src/main/java/org/dromara/dynamictp/apapter/brpc/client/StarlightClientDtpAdapter.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import org.dromara.dynamictp.common.util.ReflectionUtil;
3030
import org.dromara.dynamictp.jvmti.JVMTI;
3131

32-
import java.util.Arrays;
3332
import java.util.List;
3433
import java.util.Objects;
3534

@@ -63,7 +62,7 @@ protected void initialize() {
6362
super.initialize();
6463

6564
List<StarlightClient> starlightClients = Lists.newArrayList();
66-
starlightClients.addAll(Arrays.asList(JVMTI.getInstances(StarlightClient.class)));
65+
starlightClients.addAll(JVMTI.getInstances(StarlightClient.class));
6766
if (CollectionUtils.isEmpty(starlightClients)) {
6867
log.warn("Cannot find beans of type StarlightClient.");
6968
return;

adapter/adapter-grpc/src/main/java/org/dromara/dynamictp/adapter/grpc/GrpcDtpAdapter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import io.grpc.internal.ServerImpl;
2323
import lombok.extern.slf4j.Slf4j;
2424
import lombok.val;
25-
import org.apache.commons.lang3.ArrayUtils;
25+
import org.apache.commons.collections4.CollectionUtils;
2626
import org.dromara.dynamictp.adapter.common.AbstractDtpAdapter;
2727
import org.dromara.dynamictp.common.properties.DtpProperties;
2828
import org.dromara.dynamictp.common.util.ReflectionUtil;
@@ -59,7 +59,7 @@ public void refresh(DtpProperties dtpProperties) {
5959
@Override
6060
protected void initialize() {
6161
val beans = JVMTI.getInstances(ServerImpl.class);
62-
if (ArrayUtils.isEmpty(beans)) {
62+
if (CollectionUtils.isEmpty(beans)) {
6363
log.warn("Cannot find beans of type ServerImpl.");
6464
return;
6565
}

adapter/adapter-rocketmq/src/main/java/org/dromara/dynamictp/adapter/rocketmq/RocketMqDtpAdapter.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import lombok.extern.slf4j.Slf4j;
2121
import lombok.val;
22+
import org.apache.commons.collections4.CollectionUtils;
2223
import org.apache.commons.lang3.ArrayUtils;
2324
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
2425
import org.apache.rocketmq.client.impl.consumer.ConsumeMessageConcurrentlyService;
@@ -70,7 +71,7 @@ protected void initialize() {
7071
public void adaptConsumerExecutors() {
7172

7273
val beans = JVMTI.getInstances(DefaultMQPushConsumer.class);
73-
if (ArrayUtils.isEmpty(beans)) {
74+
if (CollectionUtils.isEmpty(beans)) {
7475
log.warn("Cannot find beans of type DefaultMQPushConsumer.");
7576
return;
7677
}
@@ -97,7 +98,7 @@ public void adaptConsumerExecutors() {
9798
public void adaptProducerExecutors() {
9899

99100
val beans = JVMTI.getInstances(DefaultMQProducer.class);
100-
if (ArrayUtils.isEmpty(beans)) {
101+
if (CollectionUtils.isEmpty(beans)) {
101102
log.warn("Cannot find beans of type DefaultMQProducer.");
102103
return;
103104
}

core/src/main/java/org/dromara/dynamictp/core/system/SystemMetricManager.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,9 @@ public void run() {
8989
double processCpuUsage = (double) elapsedCpu / elapsedTime / cpuCores;
9090
prevProcessCpuTime = newProcessCpuTime;
9191
prevUpTime = newUpTime;
92-
currProcessCpuUsage = Math.min(processCpuUsage, 1);
92+
currProcessCpuUsage = processCpuUsage;
9393
} catch (Throwable e) {
94-
log.warn("Get system metrics error.", e);
94+
log.error("Get system metrics error.", e);
9595
}
9696
}
9797
}

example/example-consul-cloud/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,11 @@
7070
<groupId>org.springframework.boot</groupId>
7171
<artifactId>spring-boot-starter-undertow</artifactId>
7272
</dependency>
73+
74+
<dependency>
75+
<groupId>org.dromara.dynamictp</groupId>
76+
<artifactId>dynamic-tp-extension-skywalking</artifactId>
77+
</dependency>
7378
</dependencies>
7479

7580
</project>

extension/extension-skywalking/src/main/java/org/dromara/dynamictp/extension/skywalking/init/SwInitializer.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@
1818
package org.dromara.dynamictp.extension.skywalking.init;
1919

2020
import lombok.extern.slf4j.Slf4j;
21+
import org.apache.commons.collections4.CollectionUtils;
2122
import org.dromara.dynamictp.core.support.init.DtpInitializer;
2223
import org.dromara.dynamictp.jvmti.JVMTI;
2324

24-
import java.util.Objects;
25+
import java.util.List;
2526

2627
import static org.dromara.dynamictp.common.constant.DynamicTpConst.DTP_EXECUTE_ENHANCED;
2728
import static org.dromara.dynamictp.common.constant.DynamicTpConst.FALSE_STR;
@@ -49,8 +50,8 @@ public String getName() {
4950
@Override
5051
public void init() {
5152
try {
52-
ClassLoader[] classLoaders = JVMTI.getInstances(ClassLoader.class);
53-
if (Objects.isNull(classLoaders)) {
53+
List<ClassLoader> classLoaders = JVMTI.getInstances(ClassLoader.class);
54+
if (CollectionUtils.isEmpty(classLoaders)) {
5455
return;
5556
}
5657
for (ClassLoader cl : classLoaders) {
@@ -65,7 +66,7 @@ public void init() {
6566
}
6667
}
6768
} catch (Throwable e) {
68-
log.error("DynamicTp {} init error", getName(), e);
69+
log.error("DynamicTp {} init failed", getName(), e);
6970
}
7071
}
7172

jvmti/jvmti-runtime/src/main/java/org/dromara/dynamictp/jvmti/JVMTI.java

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,15 @@
1818
package org.dromara.dynamictp.jvmti;
1919

2020
import lombok.extern.slf4j.Slf4j;
21+
import org.apache.commons.collections4.CollectionUtils;
2122
import org.scijava.nativelib.JniExtractor;
2223
import org.scijava.nativelib.NativeLoader;
2324

2425
import java.io.File;
26+
import java.util.Arrays;
27+
import java.util.Collections;
28+
import java.util.List;
29+
import java.util.concurrent.atomic.AtomicBoolean;
2530

2631
/**
2732
* Use JVMTI technology to implement some things that Java code can't do.
@@ -36,18 +41,22 @@ public class JVMTI {
3641

3742
private static final String LIB_NAME = "JniLibrary";
3843

44+
private static final AtomicBoolean AVAILABLE = new AtomicBoolean(false);
45+
3946
static {
4047
try {
4148
final JniExtractor extractor = NativeLoader.getJniExtractor();
4249
final String path = extractor.extractJni("", LIB_NAME).getAbsolutePath();
4350
System.load(path);
51+
AVAILABLE.set(true);
4452
} catch (Throwable ignored) {
4553
try {
4654
File path = new File(JVMTI.class.getProtectionDomain().getCodeSource().getLocation().getPath());
4755
String libPath = new File(path, JVMTIUtils.detectLibName()).getAbsolutePath();
4856
System.load(libPath);
57+
AVAILABLE.set(true);
4958
} catch (Throwable t) {
50-
log.error("JVMTI init failed !", t);
59+
log.error("JVMTI initialization failed, currently only linux and macos are supported!", t);
5160
}
5261
}
5362
}
@@ -61,14 +70,14 @@ public class JVMTI {
6170
* @throws RuntimeException if find many instances
6271
*/
6372
public static <T> T getInstance(final Class<T> klass) {
64-
final T[] instances = getInstances0(klass, 1);
65-
if (null == instances || instances.length == 0) {
73+
final List<T> instances = getInstances(klass, 1);
74+
if (CollectionUtils.isEmpty(instances)) {
6675
return null;
6776
}
68-
if (instances.length > 1) {
77+
if (instances.size() > 1) {
6978
throw new RuntimeException("expect only one instance, actually find many instances !");
7079
}
71-
return instances[0];
80+
return instances.get(0);
7281
}
7382

7483
/**
@@ -80,8 +89,8 @@ public static <T> T getInstance(final Class<T> klass) {
8089
* @param <T> class type
8190
* @return current surviving instances
8291
*/
83-
public static <T> T[] getInstances(final Class<T> klass) {
84-
return getInstances0(klass, -1);
92+
public static <T> List<T> getInstances(final Class<T> klass) {
93+
return getInstances(klass, -1);
8594
}
8695

8796
/**
@@ -95,8 +104,11 @@ public static <T> T[] getInstances(final Class<T> klass) {
95104
* It is recommended to pass in a small {@code limit} value which is larger than 0.
96105
* @return current surviving instances
97106
*/
98-
public static <T> T[] getInstances(final Class<T> klass, final int limit) {
99-
return getInstances0(klass, limit);
107+
public static <T> List<T> getInstances(final Class<T> klass, final int limit) {
108+
if (!AVAILABLE.get()) {
109+
return Collections.emptyList();
110+
}
111+
return Arrays.asList(getInstances0(klass, limit));
100112
}
101113

102114
/**

0 commit comments

Comments
 (0)