t8y2/dbx · critical
warm up startup %s: %w
Error message
warm up startup %s: %w
What it means
benchmarkStartups in the RabbitMQ agent benchmark harness calls startAgent for a warm-up pass and panics with this wrapped error if the agent process cannot be started. Because warm-up is mandatory before benchmarking, startup failure is treated as fatal via panic rather than a returned error.
Source
Thrown at agents/drivers/rabbitmq/bench/agent_compare.go:149
"mq_list_topics",
managementParams,
warmupRequests/5,
managementRequests,
))
}
}
}
func benchmarkStartups(agents []agentSpec, warmups, iterations int) []benchmarkResult {
for warmup := 0; warmup < warmups; warmup++ {
order := agents
if warmup%2 == 1 {
order = []agentSpec{agents[1], agents[0]}
}
for _, agent := range order {
process, _, err := startAgent(agent.Command)
if err != nil {
panic(fmt.Errorf("warm up startup %s: %w", agent.Name, err))
}
if _, err := process.call("handshake", map[string]any{}); err != nil {
process.kill()
panic(fmt.Errorf("warm up handshake %s: %w", agent.Name, err))
}
if err := process.close(); err != nil {
panic(fmt.Errorf("close startup warmup %s: %w", agent.Name, err))
}
}
}
readySamples := map[string][]float64{}
handshakeSamples := map[string][]float64{}
rssSamples := map[string][]int64{}
readyDurations := map[string]time.Duration{}
handshakeDurations := map[string]time.Duration{}
for iteration := 0; iteration < iterations; iteration++ {
order := agentsView on GitHub (pinned to c0390bff16)
Solutions
- Build the agent binaries first (check the benchmark README / Makefile for the build step)
- Verify each agentSpec.Command path in the agents list is correct and executable (chmod +x, correct absolute path)
- Run the agent command manually to see the real startup error
- Check for architecture/interpreter mismatches (file <binary>, ldd <binary>)
- Read the wrapped %w error from the panic for the underlying exec failure
Example fix
// before: benchmark run without building agents // panic: warm up startup go-agent: exec: "./agent": stat ./agent: no such file or directory // after go build -o ./agent ./cmd/agent go run ./bench/agent_compare
Defensive patterns
Strategy: try-catch
Validate before calling
func agentReady(cmd []string) error {
if len(cmd) == 0 {
return fmt.Errorf("empty agent command")
}
path, err := exec.LookPath(cmd[0])
if err != nil {
return fmt.Errorf("agent binary not found: %w", err)
}
if info, err := os.Stat(path); err == nil && info.Mode()&0111 == 0 {
return fmt.Errorf("%s is not executable", path)
}
return nil
}
// call for each agentSpec before benchmarkStartups Type guard
func canStartAgent(spec agentSpec) bool {
return len(spec.Command) > 0 && exec.LookPath(spec.Command[0]) == nil
} Try / catch
// the harness panics on warm-up failure; run it with recover
func runBenchmarkSafe() {
defer func() {
if r := recover(); r != nil {
log.Fatalf("benchmark aborted during warm-up: %v", r)
}
}()
benchmarkStartups()
} Prevention
- Build all agent binaries before invoking the benchmark (CI build step)
- Pre-flight each agentSpec.Command with exec.LookPath and an executable-bit check
- Run each agent command standalone once to surface missing dependencies
- Pin matching architectures between host and agent binaries
When it happens
Trigger: Running the agent_compare benchmark binary when an agentSpec.Command in the agents list fails to spawn — binary not found, exec format error, or immediate exit of the agent process.
Common situations: Agent binary not built before running the benchmark; wrong path in the agent command config; architecture mismatch (arm64 binary on x86); missing runtime dependencies for the agent executable.
Related errors
- timed out waiting for agent readiness
- timed out during {method}
- {candidate.name} {method}: {json.dumps(response['error'])}
- {process.candidate.name} paged query returned {rows} rows, e
- timed out waiting for agent readiness
AI-assisted analysis of t8y2/dbx@c0390bff16 (2026-09-05).
Data as JSON: /api/errors/79756406c8d79a85.
Report an issue: GitHub.