pinpoint-apm/pinpoint · warning

reporter close fail

Error message

reporter close fail

What it means

The last step of GrpcModuleLifeCycle.shutdown() closes the aggregated reporter via IOUtils.closeQuietly(reporter, ...). If reporter.close() throws (flush of buffered spans/stats/metadata to the gRPC senders fails), the callback logs "reporter close fail". It indicates some buffered telemetry may be lost at shutdown, but the agent still terminates.

Source

Thrown at agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/module/GrpcModuleLifeCycle.java:124

    @Override
    public void shutdown() {
        logger.info("shutdown()");
        IOUtils.closeQuietly(spanDataSender, (ex) -> logger.warn("spanDataSender close fail", ex));
        IOUtils.closeQuietly(statDataSender, (ex) -> logger.warn("statDataSender close fail", ex));
        IOUtils.closeQuietly(agentDataSender, (ex) -> logger.warn("agentDataSender close fail", ex));
        IOUtils.closeQuietly(metadataDataSender, (ex) -> logger.warn("metadataDataSender close fail", ex));

        if (dnsExecutorService != null) {
            if (!MoreExecutors.shutdownAndAwaitTermination(dnsExecutorService, Duration.ofSeconds(3))) {
                logger.warn("dnsExecutor shutdown failed");
            }
        }
        if (reconnectScheduledExecutorService != null) {
            if (!MoreExecutors.shutdownAndAwaitTermination(reconnectScheduledExecutorService, Duration.ofSeconds(3))) {
                logger.warn("reconnectScheduledExecutor shutdown failed");
            }
        }
        IOUtils.closeQuietly(reporter, (ex) -> logger.warn("reporter close fail", ex));
    }

    @Override
    public String toString() {
        return "GrpcModuleLifeCycle{" +
                ", agentDataSender=" + agentDataSender +
                ", metadataDataSender=" + metadataDataSender +
                ", spanDataSender=" + spanDataSender +
                ", statDataSender=" + statDataSender +
                ", dnsExecutorService=" + dnsExecutorService +
                ", reconnectScheduledExecutorService=" + reconnectScheduledExecutorService +
                '}';
    }
}

View on GitHub (pinned to 744c3d3075)

Solutions

  1. Inspect the cause logged under this warning; fix the underlying sender/channel issue (network, collector address).
  2. Allow the agent a graceful stop window so in-flight spans can flush before JVM exit.
  3. Avoid double-invoking shutdown() on the same module lifecycle.
  4. If data loss at shutdown is unacceptable, keep the collector reachable and consider graceful JVM shutdown hooks with delay.
Defensive patterns

Strategy: try-catch

Try / catch

try {
    lifeCycle.shutdown();
} catch (Exception e) {
    logger.warn("reporter close issue during profiler shutdown", e);
}

Prevention

When it happens

Trigger: shutdown() invoked while the reporter holds unflushed data and a sender close or flush fails — e.g. gRPC channel already closed/broken, or shutdown racing an in-flight flush.

Common situations: Agent shutdown during collector outage (flush fails on broken channel); closing the module twice; OOM or thread-pool exhaustion preventing the flush from completing; rapid start/stop cycles in tests.

Related errors


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