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
- Ensure pinpoint-bootstrap.jar is passed only once via -javaagent and is not also on the classpath/bootclasspath
- Do not attach the agent programmatically if it was already loaded at startup
- Restart the JVM — the agent cannot be cleanly re-loaded in the same process
- 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
- Never place pinpoint-bootstrap.jar on the classpath as well as -javaagent
- Skip programmatic attach if the agent was loaded at startup
- Centralize agent flags in one launch script
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
- ProcessingEnvOptionsHolder not initialized yet.
- PinPoint is disabled via Env/Property.
- AgentPath not found path:
- Invalid pinpoint-bootstrap.jar:
- Agent Directory Verify fail. skipping agent loading.
AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07).
Data as JSON: /api/errors/91a7977d40fd193a.
Report an issue: GitHub.