dd-trace-java
dd-trace-java copied to clipboard
NoClassDefFoundError: sun/misc/Unsafe
Describe what happened: When starting the datadog-agent under java 17 it cant find the Unsafe class -
Picked up JAVA_TOOL_OPTIONS: -javaagent:./dd-java-agent.jar -XX:FlightRecorderOptions=stackdepth=256 -XX:+UseParallelGC -XX:MaxRAMPercentage=80
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
[dd.trace 2021-11-08 08:04:22:569 +0100] [main] ERROR datadog.trace.bootstrap.Agent - Throwable thrown while installing the Datadog Agent
java.lang.NoClassDefFoundError: sun/misc/Unsafe
at com.googlecode.concurrentlinkedhashmap.ConcurrentHashMapV8.getUnsafe(ConcurrentHashMapV8.java:4136)
at com.googlecode.concurrentlinkedhashmap.ConcurrentHashMapV8.<clinit>(ConcurrentHashMapV8.java:4101)
at com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap.<init>(ConcurrentLinkedHashMap.java:221)
at com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap.<init>(ConcurrentLinkedHashMap.java:104)
at com.googlecode.concurrentlinkedhashmap.ConcurrentLinkedHashMap$Builder.build(ConcurrentLinkedHashMap.java:1598)
at datadog.trace.agent.tooling.CLHMWeakCache.<init>(CLHMWeakCache.java:28)
at datadog.trace.agent.tooling.CLHMWeakCache$Provider.newWeakCache(CLHMWeakCache.java:13)
at datadog.trace.agent.tooling.AgentTooling.newWeakCache(AgentTooling.java:78)
at datadog.trace.agent.tooling.bytebuddy.DDCachingPoolStrategy.<init>(DDCachingPoolStrategy.java:73)
at datadog.trace.agent.tooling.AgentTooling.<clinit>(AgentTooling.java:70)
at datadog.trace.agent.tooling.AgentInstaller.<clinit>(AgentInstaller.java:48)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at datadog.trace.bootstrap.Agent.startDatadogAgent(Agent.java:373)
at datadog.trace.bootstrap.Agent.start(Agent.java:115)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at datadog.trace.bootstrap.AgentBootstrap.agentmain(AgentBootstrap.java:60)
at datadog.trace.bootstrap.AgentBootstrap.premain(AgentBootstrap.java:47)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:491)
at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:503)
Caused by: java.lang.ClassNotFoundException: sun.misc.Unsafe
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:440)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:587)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
at datadog.trace.bootstrap.DatadogClassLoader.loadFromPackage(DatadogClassLoader.java:99)
at datadog.trace.bootstrap.DatadogClassLoader$DelegateClassLoader.loadClass(DatadogClassLoader.java:195)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
... 29 more
ERROR datadog.trace.bootstrap.AgentBootstrap
Describe what you expected: that the agent starts without an error
Steps to reproduce the issue: start the datadog agent
Additional environment details (Operating System, Cloud provider, etc): Base image of the container: eclipse-temurin:17.0.1_12-jdk-focal (https://hub.docker.com/layers/eclipse-temurin/library/eclipse-temurin/17.0.1_12-jdk-focal/images/sha256-46f35cd099e25ed0d9f8ad4c33e8ad436e34f3b889e112d38ed000f24256ff8d?context=explore) Agent version: 0.90.0~32708e53ec
Thanks @patrickhilgenstock - we're still working on full support for Java 17 in the Java tracer.
For now you need to add this JDK option when running a JPMS modular application with the Java tracer:
--add-modules jdk.unsupported
This will add the jdk.unsupported module containing sun.misc.Unsafe to the modular classpath.
Note this module is automatically added when running applications using the legacy classpath.
Thanks @mcculls we will do that! Is there any plans on when to release the fully working tracer? is there an issue to follow for getting notified when its ready?