dd-trace-java icon indicating copy to clipboard operation
dd-trace-java copied to clipboard

NoClassDefFoundError: sun/misc/Unsafe

Open patrickhilgenstock opened this issue 4 years ago • 2 comments

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

patrickhilgenstock avatar Nov 11 '21 08:11 patrickhilgenstock

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.

mcculls avatar Nov 12 '21 12:11 mcculls

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?

patrickhilgenstock avatar Nov 15 '21 08:11 patrickhilgenstock