{"record":{"id":"37b39107d5e42e3c","repo":"aeron-io/aeron","slug":"service-interval-exceeded-timeout-timeout-interval-interval","errorCode":null,"errorMessage":"service interval exceeded: timeout=<timeout>, interval=<interval>","messagePattern":"service interval exceeded: timeout=<timeout>, interval=<interval>","errorType":"exception","errorClass":"ConductorServiceTimeoutException","httpStatus":null,"severity":"error","filePath":"aeron-client/src/main/java/io/aeron/ClientConductor.java","lineNumber":1874,"sourceCode":"        if ((timeOfLastServiceNs + idleSleepDurationNs) - nowNs < 0)\n        {\n            checkServiceInterval(nowNs);\n            timeOfLastServiceNs = nowNs;\n\n            workCount += checkLiveness(nowNs);\n            workCount += checkLingeringResources(nowNs);\n        }\n\n        return workCount;\n    }\n\n    private void checkServiceInterval(final long nowNs)\n    {\n        if ((timeOfLastServiceNs + interServiceTimeoutNs) - nowNs < 0)\n        {\n            terminateConductor();\n\n            throw new ConductorServiceTimeoutException(\n                \"service interval exceeded: timeout=\" + SystemUtil.formatDuration(interServiceTimeoutNs) +\n                \", interval=\" + SystemUtil.formatDuration(nowNs - timeOfLastServiceNs));\n        }\n    }\n\n    private int checkLiveness(final long nowNs)\n    {\n        if ((timeOfLastKeepAliveNs + keepAliveIntervalNs) - nowNs < 0)\n        {\n            final long nowMs = epochClock.time();\n            final long lastKeepAliveMs = driverProxy.timeOfLastDriverKeepaliveMs();\n\n            if (nowMs > (lastKeepAliveMs + driverTimeoutMs))\n            {\n                terminateConductor();\n\n                if (Aeron.NULL_VALUE == lastKeepAliveMs)\n                {","sourceCodeStart":1856,"sourceCodeEnd":1892,"githubUrl":"https://github.com/aeron-io/aeron/blob/6d60124e15e35c11b49ba2e3c2c2858a09a18803/aeron-client/src/main/java/io/aeron/ClientConductor.java#L1856-L1892","documentation":"ConductorServiceTimeoutException thrown when the interval between two successive services of the client conductor (its duty-cycle loop) exceeded the interServiceTimeoutNs. This means the application starved the conductor thread (or blocked it inside a callback) for so long the driver may have timed the client out; the conductor terminates itself to stay safe.","triggerScenarios":"Blocking for longer than interServiceTimeout (default 10s) inside an available-image handler or other client callback; the conductor thread descheduled (VM pause, container CPU throttling, debugger breakpoint); calling blocking operations from within callbacks.","commonSituations":"Long GC pauses or VM freezes; heavy work (parsing, I/O) done inside image-available callbacks on the conductor thread; cgroup CPU limits starving the thread; debuggers suspending the thread during development.","solutions":["Keep callbacks fast: move heavy work off the conductor thread into a queue/worker","Increase Context.interServiceTimeout if your workload legitimately pauses","Check GC settings and container CPU limits for long pauses","Never block (sleep, I/O, locks) inside Aeron client callbacks"],"exampleFix":"// before\nsubscription.onAvailableImage(img -> parseAndWriteToDisk(img)); // blocks conductor thread\n// after\nsubscription.onAvailableImage(img -> workQueue.offer(img));","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"catch (ConductorServiceTimeoutException e) { recreateClient(); } // conductor self-terminated; a new Aeron instance is required","preventionTips":["Never block or do heavy work inside Aeron callbacks","Tune Context.interServiceTimeout for pause-prone environments","Watch GC pauses and container CPU throttling","Avoid debugger suspends on the conductor thread during development"],"tags":["aeron","timeout","callbacks","scheduling"],"backgroundTag":"request-timeout","analyzedSha":"6d60124e15e35c11b49ba2e3c2c2858a09a18803","analyzedAt":"2026-09-12T11:17:07.683Z","contentChangedAt":"2026-09-12T11:17:07.683Z","schemaVersion":2},"datasetVersion":"2026-09-19T12:17:13.211Z"}