Skip to content

Commit ffd45ae

Browse files
authored
Allow disabling JFR profiler manually via configuration (DataDog#6428)
1 parent a3007c0 commit ffd45ae

2 files changed

Lines changed: 20 additions & 13 deletions

File tree

dd-java-agent/agent-profiling/src/main/java/com/datadog/profiling/agent/ControllerFactory.java

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import com.datadog.profiling.controller.oracle.OracleJdkController;
2424
import datadog.trace.api.Config;
2525
import datadog.trace.api.Platform;
26+
import datadog.trace.api.config.ProfilingConfig;
2627
import datadog.trace.bootstrap.config.provider.ConfigProvider;
2728
import de.thetaphi.forbiddenapis.SuppressForbidden;
2829
import java.lang.reflect.InvocationTargetException;
@@ -76,20 +77,25 @@ public static Controller createController(final ConfigProvider configProvider)
7677
Implementation impl = Implementation.NONE;
7778
boolean isOracleJDK8 = Platform.isOracleJDK8();
7879
boolean isDatadogProfilerEnabled = Config.get().isDatadogProfilerEnabled();
79-
if (isOracleJDK8 && !isDatadogProfilerEnabled) {
80-
try {
81-
Class.forName("com.oracle.jrockit.jfr.Producer");
82-
impl = Implementation.ORACLE;
83-
} catch (ClassNotFoundException ignored) {
84-
log.debug("Failed to load oracle profiler", ignored);
80+
if (ConfigProvider.getInstance()
81+
.getBoolean(ProfilingConfig.PROFILING_DEBUG_JFR_DISABLED, false)) {
82+
log.warn("JFR is disabled by configuration");
83+
} else {
84+
if (isOracleJDK8 && !isDatadogProfilerEnabled) {
85+
try {
86+
Class.forName("com.oracle.jrockit.jfr.Producer");
87+
impl = Implementation.ORACLE;
88+
} catch (ClassNotFoundException ignored) {
89+
log.debug("Failed to load oracle profiler", ignored);
90+
}
8591
}
86-
}
87-
if (!isOracleJDK8) {
88-
try {
89-
Class.forName("jdk.jfr.Event");
90-
impl = Implementation.OPENJDK;
91-
} catch (ClassNotFoundException ignored) {
92-
log.debug("Failed to load openjdk profiler", ignored);
92+
if (!isOracleJDK8) {
93+
try {
94+
Class.forName("jdk.jfr.Event");
95+
impl = Implementation.OPENJDK;
96+
} catch (ClassNotFoundException ignored) {
97+
log.debug("Failed to load openjdk profiler", ignored);
98+
}
9399
}
94100
}
95101
if (impl == Implementation.NONE) {

dd-trace-api/src/main/java/datadog/trace/api/config/ProfilingConfig.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ public final class ProfilingConfig {
168168
public static final String PROFILING_ENABLED_EVENTS = "profiling.enabled.events";
169169

170170
public static final String PROFILING_DEBUG_DUMP_PATH = "profiling.debug.dump_path";
171+
public static final String PROFILING_DEBUG_JFR_DISABLED = "profiling.debug.jfr.disabled";
171172

172173
public static final String PROFILING_CONTEXT_ATTRIBUTES = "profiling.context.attributes";
173174

0 commit comments

Comments
 (0)