pinpoint-apm/pinpoint · warning

pinpoint-bootstrap already started. skipping agent loading.

Error message

pinpoint-bootstrap already started. skipping agent loading.

What it means

LoadState.start() returned false, meaning the bootstrap has already been initialized in this JVM. The premain logs a warning and skips loading to avoid double initialization (duplicate agents, duplicate class instrumentation).

Source

Thrown at agent-module/bootstraps/bootstrap/src/main/java/com/navercorp/pinpoint/bootstrap/PinpointBootStrap.java:57

 */
public class PinpointBootStrap {

    private static final BootLogger logger = BootLogger.getLogger(PinpointBootStrap.class);

    private static final LoadState STATE = new LoadState();

    public static void premain(String agentArgs, Instrumentation instrumentation) {

        if (DisableOptions.isBootDisabled()) {
            if (logger.isWarnEnabled()) {
                logger.warn("PinPoint is disabled via Env/Property.");
            }
            return;
        }

        final boolean success = STATE.start();
        if (!success) {
            logger.warn("pinpoint-bootstrap already started. skipping agent loading.");
            return;
        }

        PinpointBootStrap bootStrap = new PinpointBootStrap(agentArgs, instrumentation);
        bootStrap.start();

    }

    private final String agentArgs;
    private final Instrumentation instrumentation;

    private PinpointBootStrap(String agentArgs, Instrumentation instrumentation) {
        this.agentArgs = agentArgs;
        this.instrumentation = Objects.requireNonNull(instrumentation, "instrumentation");
    }


    private void start() {

View on GitHub (pinned to 744c3d3075)

Solutions

  1. Ensure pinpoint-bootstrap.jar is passed only once via -javaagent and is not also on the classpath/bootclasspath
  2. Do not attach the agent programmatically if it was already loaded at startup
  3. Restart the JVM — the agent cannot be cleanly re-loaded in the same process
  4. If seen after an attach attempt, verify with the agent logs which path loaded it first

Example fix

// before
java -javaagent:pinpoint-bootstrap.jar -cp pinpoint-bootstrap.jar -jar app.jar
// after
java -javaagent:pinpoint-bootstrap.jar -jar app.jar
Defensive patterns

Strategy: validation

Validate before calling

// shell: count -javaagent occurrences for pinpoint
COUNT=$(echo "$JAVA_OPTS" | grep -o 'pinpoint-bootstrap.jar' | wc -l)
[ "$COUNT" -le 1 ] || echo "pinpoint-bootstrap.jar referenced $COUNT times"

Prevention

When it happens

Trigger: pinpoint-bootstrap.jar is on the bootclasspath/system path AND passed via -javaagent, so premain runs twice; the agent is attached programmatically (attach API) to a JVM that already loaded it; the jar is reloaded by a hot-reload mechanism.

Common situations: Misconfigured startup scripts listing the agent twice; using both -javaagent and an attach-based deployment; framework hot-reload triggering re-instrumentation; copying the bootstrap jar into the bootclasspath 'to make sure it loads'.

Understand the failure class

Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.

Related errors


AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07). Data as JSON: /api/errors/91a7977d40fd193a. Report an issue: GitHub.