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

  1. curl the exact warmup URL manually and confirm a 200 with App Router HTML.
  2. Rebuild the fixture app (next build) if you changed routes or switched branches.
  3. Check the server process is the one you expect on that port (lsof -i :PORT).
  4. 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

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


AI-assisted analysis of vercel/next.js@0ae8c72462 (2026-08-06). Data as JSON: /api/errors/fcdb1584cc145222. Report an issue: GitHub.