Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8325530

Vague error message when com.sun.tools.attach.VirtualMachine fails to load agent library

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P4 P4
    • 23
    • 21, 23
    • hotspot
    • svc
    • 21
    • b12
    • generic
    • generic

      The bug was originally reported against async-profiler [1], but it turned out to be a JDK issue.

      Before JDK 21, AttachListener responded with return code -1 if `load` command failed, i.e. dlopen() wasn't successful. Since JDK 21, it started returning 0 whether a library was loaded or not. This caused misbehavior of tools that relied on dynamic attach protocol: particularly, jattach and async-profiler.

      The issue can be also observed without external tools. Because of the same bug, Attach API [2] no longer passes dlerror() message to user, making it harder to troubleshoot agent loading.

      Example of an error message in JDK 11 - JDK 20:

      Exception in thread "main" com.sun.tools.attach.AgentLoadException: Failed to load agent library: libasyncProfiler.so was not loaded./lib/aarch64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by libasyncProfiler.so)
              at jdk.attach/sun.tools.attach.VirtualMachineImpl.execute(VirtualMachineImpl.java:221)
              at jdk.attach/sun.tools.attach.HotSpotVirtualMachine.loadAgentLibrary(HotSpotVirtualMachine.java:94)
              at jdk.attach/sun.tools.attach.HotSpotVirtualMachine.loadAgentPath(HotSpotVirtualMachine.java:128)
              at jdk.attach/com.sun.tools.attach.VirtualMachine.loadAgentPath(VirtualMachine.java:471)
              at AttachTest.main(AttachTest.java:8)

      The error message in JDK 21 - JDK 23:

      Exception in thread "main" com.sun.tools.attach.AgentLoadException: libasyncProfiler.so was not loaded.
              at jdk.attach/sun.tools.attach.HotSpotVirtualMachine.loadAgentLibrary(HotSpotVirtualMachine.java:108)
              at jdk.attach/sun.tools.attach.HotSpotVirtualMachine.loadAgentPath(HotSpotVirtualMachine.java:128)
              at jdk.attach/com.sun.tools.attach.VirtualMachine.loadAgentPath(VirtualMachine.java:471)
              at AttachTest.main(AttachTest.java:8)

      Note that before JDK 21, the error message clearly pointed to the root cause related to GLIBC version. Since JDK 21, the error message is vague.

      [1] https://github.com/async-profiler/async-profiler/issues/885
      [2] https://docs.oracle.com/en/java/javase/21/docs/api/jdk.attach/com/sun/tools/attach/VirtualMachine.html

            amenkov Alex Menkov
            apangin Andrei Pangin
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated:
              Resolved: