vercel/next.js · error
[${label}] warmup: all ${batchSize} requests failed — server
Error message
[${label}] warmup: all ${batchSize} requests failed — server is not serving this route What it means
Thrown during the warmup phase of the render-pipeline benchmark when an entire serial batch of requests produced zero successful samples. Because warmup drives real requests and collects timing samples, a fully-empty result set means every request threw or returned a non-2xx/timeout, so the server is definitively not serving that route. Aborting here is intentional — continuing would benchmark connection errors instead of render performance.
Source
Thrown at bench/render-pipeline/benchmark.ts:615
batchSize: number,
untilStable: boolean,
timeoutMs: number,
label: string
): Promise<number> {
const maxBatches = 10
const stabilityThreshold = 0.05
let totalRequests = 0
let prevMean = Infinity
for (let batch = 0; batch < (untilStable ? maxBatches : 1); batch++) {
const { samples, errors } = await runSerialRequests(
url,
batchSize,
timeoutMs
)
totalRequests += batchSize
if (samples.length === 0) {
throw new Error(
`[${label}] warmup: all ${batchSize} requests failed — server is not serving this route`
)
}
if (errors > 0) {
console.warn(`[${label}] warmup: ${errors}/${batchSize} requests failed`)
}
const mean = samples.reduce((s, v) => s + v.totalMs, 0) / samples.length
if (untilStable && batch > 0) {
const delta = Math.abs(mean - prevMean) / prevMean
if (delta < stabilityThreshold) {
console.log(
`[${label}] warmup stabilized after ${totalRequests} requests ` +
`(batch ${batch + 1}, delta=${(delta * 100).toFixed(1)}%)`
)
return totalRequests
}
}View on GitHub (pinned to 0ae8c72462)
Solutions
- curl the exact warmup URL manually and confirm a 200 with App Router HTML.
- Rebuild the fixture app (next build) if you changed routes or switched branches.
- Check the server process is the one you expect on that port (lsof -i :PORT).
- Verify the route path matches an actual app/ route including dynamic segments and params.
Example fix
// before: route missing from current build // server built from old branch without /dashboard // after: rebuild then run pnpm --filter=next build && pnpm bench:render-pipeline
Defensive patterns
Strategy: validation
Validate before calling
// Probe the route returns 2xx App Router HTML before warmup
async function assertRouteServed(url: string) {
const res = await fetch(url, { cache: 'no-store' })
if (!res.ok) throw new Error(`${url} returned ${res.status}`)
const html = await res.text()
if (!html.includes('__next_f')) throw new Error(`${url} is not App Router`)
} Type guard
null
Try / catch
null
Prevention
- Always rebuild the fixture after route/branch changes.
- Confirm the server process and port are the intended ones before benchmarking.
- Pre-warm with a single curl to catch 404/500 early.
When it happens
Trigger: The route URL is wrong or returns 404/500 for every request; the server crashed between routes; a firewall or proxy rejects the loopback connection; the route requires params or auth that were not provided; the server is a stale process serving an older build without that route.
Common situations: Switching branches and forgetting to rebuild the fixture so the new route does not exist; pointing at a port running a different app; a dynamic route like /[slug] hit with the bare path; SSL/TLS mismatch on the benchmark URL.
Related errors
- Server process exited before becoming ready (is port already
- Server did not become ready within ${timeoutMs}ms
- Port ${port} is already serving responses — another server i
- Failed to fetch ${url}
- Unknown option: --${rawKey}
AI-assisted analysis of vercel/next.js@0ae8c72462 (2026-08-06).
Data as JSON: /api/errors/fcdb1584cc145222.
Report an issue: GitHub.