Skip to content

Commit a1e426c

Browse files
authored
Avoid initializing SMAP events on JDKs with no JFR (#9231)
1 parent 05a10a5 commit a1e426c

File tree

2 files changed

+19
-10
lines changed
  • dd-java-agent
    • agent-bootstrap/src/main/java/datadog/trace/bootstrap
    • agent-profiling/profiling-controller-openjdk/src/main/java/com/datadog/profiling/controller/openjdk/events

2 files changed

+19
-10
lines changed

dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -881,12 +881,7 @@ private static synchronized void registerSmapEntryEvent() {
881881
"com.datadog.profiling.controller.openjdk.events.SmapEntryFactory");
882882
final Method registerMethod = smapFactoryClass.getMethod("registerEvents");
883883
registerMethod.invoke(null);
884-
} catch (final NoSuchMethodException
885-
| NoClassDefFoundError
886-
| ClassNotFoundException
887-
| UnsupportedClassVersionError
888-
| IllegalAccessException
889-
| InvocationTargetException ignored) {
884+
} catch (final Exception ignored) {
890885
log.debug("Smap entry scraping not supported");
891886
}
892887
}

dd-java-agent/agent-profiling/profiling-controller-openjdk/src/main/java/com/datadog/profiling/controller/openjdk/events/SmapEntryFactory.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import static datadog.trace.api.telemetry.LogCollector.SEND_TELEMETRY;
44

5+
import datadog.environment.JavaVirtualMachine;
56
import datadog.environment.OperatingSystem;
67
import datadog.trace.bootstrap.instrumentation.jfr.JfrHelper;
78
import java.lang.management.ManagementFactory;
@@ -21,14 +22,27 @@ public class SmapEntryFactory {
2122

2223
private static final AtomicBoolean REGISTERED = new AtomicBoolean();
2324

24-
private static final EventType SMAP_ENTRY_EVENT_TYPE =
25-
EventType.getEventType(SmapEntryEvent.class);
26-
private static final EventType AGGREGATED_SMAP_ENTRY_EVENT_TYPE =
27-
EventType.getEventType(AggregatedSmapEntryEvent.class);
25+
private static final EventType SMAP_ENTRY_EVENT_TYPE;
26+
private static final EventType AGGREGATED_SMAP_ENTRY_EVENT_TYPE;
2827

2928
private static final SmapEntryCache SMAP_ENTRY_CACHE = new SmapEntryCache(Duration.ofMillis(500));
3029

30+
static {
31+
if (!JavaVirtualMachine.isJ9() && !JavaVirtualMachine.isOracleJDK8()) {
32+
SMAP_ENTRY_EVENT_TYPE = EventType.getEventType(SmapEntryEvent.class);
33+
AGGREGATED_SMAP_ENTRY_EVENT_TYPE = EventType.getEventType(AggregatedSmapEntryEvent.class);
34+
} else {
35+
SMAP_ENTRY_EVENT_TYPE = null;
36+
AGGREGATED_SMAP_ENTRY_EVENT_TYPE = null;
37+
}
38+
}
39+
3140
public static void registerEvents() {
41+
if (SMAP_ENTRY_EVENT_TYPE == null || AGGREGATED_SMAP_ENTRY_EVENT_TYPE == null) {
42+
// JFR is not available
43+
return;
44+
}
45+
3246
// Make sure the periodic event is registered only once
3347
if (REGISTERED.compareAndSet(false, true) && OperatingSystem.isLinux()) {
3448
try {

0 commit comments

Comments
 (0)