pinpoint-apm/pinpoint · warning
Failed to send agentInfo={}
Error message
Failed to send agentInfo={} What it means
logError is the catch-all error logger for exceptions thrown during the AgentInfo send (TimeoutException, ExecutionException cause, etc.). It logs 'Failed to send agentInfo=<AgentInformation>' plus the cause when agent details are available. The send is considered failed and retried on the next cycle.
Source
Thrown at agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/AgentInfoSender.java:210
} else {
logger.warn("Failed to send agentInfo. request unsuccessful, response={}", result.getMessage());
}
}
return result.isSuccess();
} catch (ExecutionException ex) {
logError(agentInfo, ex.getCause());
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
logError(agentInfo, ex);
} catch (TimeoutException ex) {
logError(agentInfo, ex);
}
return false;
}
private void logError(AgentInfo agentInfo, Throwable cause) {
if (agentInfo != null && agentInfo.getAgentInformation() != null) {
logger.warn("Failed to send agentInfo={}", agentInfo.getAgentInformation(), cause);
} else {
logger.warn("Failed to send agentInfo", cause);
}
}
}
public static class Builder {
private final AsyncDataSender<MetaDataType, ResultResponse> dataSender;
private final AgentInfoFactory agentInfoFactory;
private long refreshIntervalMs = DEFAULT_AGENT_INFO_REFRESH_INTERVAL_MS;
private long sendIntervalMs = DEFAULT_AGENT_INFO_SEND_INTERVAL_MS;
private int maxTryPerAttempt = DEFAULT_MAX_TRY_COUNT_PER_ATTEMPT;
public Builder(AsyncDataSender<MetaDataType, ResultResponse> dataSender, AgentInfoFactory agentInfoFactory) {
this.dataSender = Objects.requireNonNull(dataSender, "dataSender");
this.agentInfoFactory = Objects.requireNonNull(agentInfoFactory, "agentInfoFactory");
}
View on GitHub (pinned to 744c3d3075)
Solutions
- Read the chained 'cause' exception in the log — TimeoutException means network/collector latency, ExecutionException wraps transport errors
- Verify collector host/port in pinpoint.config (profiler.collector.ip / .tcp / .span / .stat ports) and connectivity (telnet/nc)
- Check collector load and GC/HBase latency; increase capacity or raise the 3s threshold by adjusting code if persistently slow
- Transient failures self-heal via retry; alert on repeated occurrences
Defensive patterns
Strategy: try-catch
Validate before calling
// connectivity pre-check before agent start telnet <collector-host> 9994 # or nc -zv host port
Try / catch
try { ResultResponse r = future.get(3000, TimeUnit.MILLISECONDS); ... }
catch (ExecutionException ex) { logError(agentInfo, ex.getCause()); return false; }
catch (TimeoutException ex) { logger.warn("agentInfo send timed out; collector unreachable/slow"); return false; }
catch (InterruptedException ex) { Thread.currentThread().interrupt(); return false; } Prevention
- Verify profiler.collector.ip and port settings and firewall rules
- Watch collector GC/HBase latency that can exceed the 3s wait
- Rely on periodic retry; alert only on persistent failures
When it happens
Trigger: future.get(3000, MILLISECONDS) throws TimeoutException (collector did not respond in 3s) or ExecutionException whose cause is passed to logError; also InterruptedException handled elsewhere.
Common situations: Collector unreachable, slow, or overloaded; network partition between agent and collector; collector restart; firewall dropping the RPC port.
Understand the failure class
Background: Request timed out: what client-side request timeouts mean across libraries (Request timed out, TIMED_OUT, APITimeoutError) — this error's family across 39 libraries.
Related errors
- Failed to send agentInfo={}. result not set
- Failed to send agentInfo
- Failed to send agentInfo={}. request unsuccessful, response=
- Failed to send agentInfo. request unsuccessful, response={}
- Timed out while getting serviceUid. serviceName:${serviceNam
AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07).
Data as JSON: /api/errors/09a564dc8e422b7c.
Report an issue: GitHub.