Troubleshooting Your Deploy

Resolve issues deploying and running on Render.

If your Render service fails to build, deploy, or run, follow this guide to help resolve the issue.

Always start with the first three steps below. They'll help you identify your issue's root cause, along with the issue type:

Issue typeDescription

Build issue

These issues occur while Render is building a new version of your service, before it's deployed.

Runtime issue

These issues occur while your deployed service is starting up or actively running.

If your issue isn't covered in the sections below, we also recommend consulting your coding agent, searching the web, or asking in Render's official Discord community.

First three steps

1. Check the logs

Start every investigation by checking your service's logs. Do so in any of the following ways:

Render Dashboard

Service logs are available in the Render Dashboard:

  • If a particular deploy fails, view its logs by selecting that deploy from your service's Deploys page:

    Selecting a deploy to view logs

  • If a running service encounters an issue, open its Logs page to view, search, and filter runtime logs:

    Error logs in the Render Dashboard log explorer

Start by filtering for log lines with level: error to help identify the most likely cause.

For more details, see Logs in the Render Dashboard.

If you spot any error-level logs, proceed to the section that most closely matches the issue based on the error's details. You can also provide these details to your coding agent for help diagnosing the issue.

2. Check the metrics

Render provides a variety of performance metrics for your service. In the event of a performance issue, these metrics can help identify the root cause and when it started.

Render Dashboard

Open your service's Metrics page in the Render Dashboard to view metrics related to CPU/RAM usage, incoming requests, and more:

CPU usage graph on a service's Metrics page in the Render Dashboard

For details, see Service Metrics.

If you observe a spike in a particular metric (such as CPU/RAM usage or incoming requests), proceed to the section below that most closely matches the issue.

It's also helpful to cross-reference your metrics with your logs and your recent deploy activity to determine whether the issue coincides with a recent change.

3. Check the event history

Your service's Events page in the Render Dashboard can help you view issue patterns across multiple deploys. This page displays a timeline of significant activity, such as deploy failures, instance restarts, and maintenance:

The Events page in the Render dashboard

Build issues

Build issues occur while Render is building a new version of your service, before that version is deployed. These issues usually arise during the execution of your service's .

If your application builds correctly on your local machine but fails to build on Render, it's almost always due to one of the issues below.

Wrong language runtime

While creating a service, you choose the native runtime that corresponds to your app's language (such as Node or Python). Render also provides Docker-specific runtimes for building from a Dockerfile or pulling a prebuilt image.

  1. Check your service's runtime from the service's page in the Render Dashboard.
  2. If your service is using the wrong runtime for its language, change its runtime with these steps.

Mismatched versions

Render and your local machine might be using different versions of your app's programming language or dependencies:

MismatchDescription

Language version

Render sets a default language version for each native runtime. This default likely differs from the exact language version you use locally.

For all native runtimes besides Go, you can specify an exact language version to use. See details for each runtime:

Dependency versions

Render might be using a different version of your app's dependencies than you use locally.

Perform a fresh install of your project on your local machine to confirm that you're using exactly the dependency versions specified in your repository (such as in your package-lock.json file).

Invalid or missing configuration

As part of creating a Render service, you apply a variety of configuration settings, including:

  • The commands Render uses to build and start your app
  • The values of your app reads both during builds and at runtime

Your service can fail to build if it's missing any required configuration, or if its configuration is invalid. Common examples include:

IssueDescription

Invalid

Make sure the build command matches the command you use to build your app locally. Common examples include:

  • npm install (Node.js)
  • pip install -r requirements.txt (Python)

Invalid

If you've set a pre-deploy command, make sure it's valid as well. Common examples include:

  • bundle exec rails db:migrate (Ruby)
  • python manage.py migrate (Python)

Invalid credentials

If your Git provider credentials are expired or otherwise invalid, Render can't access your repository to pull the latest version of your app.

Verify your Git deployment credentials. If they're missing or no longer valid, replace them.

Missing or incorrect

On your local machine, your app might read environment variables from a .env file. On Render, you instead set these environment variables on your service's Environment page in the Render Dashboard. Make sure that page reflects all of the environment variables your app needs to build and start successfully.

If you're using , you can also add environment variables to your service's Blueprint file. Do not hardcode sensitive values in your Blueprint file.

Missing build tool

Any tool invoked by your build command must be available in Render's build environment. For a list of available and commonly used tools, see Tools and utilities.

If the build environment doesn't include a tool or dependency your app needs, you can install it as a preliminary step in your build command.

Common error messages

Missing resources

These errors occur when Render can't locate a file or dependency your app requires:

ErrorDescription

Module Not Found or ModuleNotFoundError

Usually indicates one of the following:

  • A referenced dependency was not found (e.g., in your package.json or requirements.txt file).
  • A referenced file (such as app.js or app.py) was not found at a specified location.
  • If you're developing on Windows or another platform with a case-insensitive filesystem, make sure that all file paths, names, and extensions are cased correctly.
    • You might need to check the contents of your Git repo directly.

Incompatibility errors

These errors occur when your app's language version is incompatible with its code or dependencies:

ErrorDescription

SyntaxError: Unexpected token '??='

The app's Node.js version doesn't support the indicated operator or method.

The engine "node" is incompatible with this module. Expected version…

The app's Node.js version doesn't work with the specified module.

requires Python >= 3.8

A dependency isn't compatible with the app's Python version.

Build process errors

The following errors can also cause your build to fail:

ErrorDescription

Build Minutes Exhausted

Your workspace used all of its monthly .

To resume builds, raise your spend limit or wait for next month's refresh.

Out of memory

Your build exceeded its available memory.

For details on memory limits while building, see Pipeline tiers.

Exited with status <N>

Your application exited or crashed while building.

See the exit code to identify the cause.

Timed out

Your build did not finish within the allowed time.

Check your logs for slow dependency installation, network requests, or stalled commands.

Runtime issues

These issues occur while a deployed service is starting up or actively running.

Startup failures

These are errors that occur while Render is starting up a newly deployed instance of your service, preventing it from going live.

IssueDescription

Invalid

Make sure your start command is valid. This usually matches the command you use to start your app locally. Common examples include:

  • npm start (Node.js)
  • gunicorn myapp:app (Python)

Missing Dockerfile CMD or ENTRYPOINT

If you're building from a Dockerfile, make sure that your Dockerfile includes the CMD or ENTRYPOINT directive (or both).

If you omit both of these directives, your deploy might appear to hang in the Render Dashboard.

Misconfigured

For web and private services, a new instance only starts receiving requests after it starts up successfully and passes health checks.

For details, see Health check errors.

Port scan timeout reached

Render failed to detect at least one open port on your service's host before its scan timed out. This error is specific to web services and private services.

Common causes include:

  • Your service does not bind to any ports.
    • If your service intentionally does not bind to any ports, create a instead of a web service or private service.
  • Your web service binds to the wrong host and port.
    • Bind your HTTP server to 0.0.0.0 and the port specified by the PORT environment variable (defaults to 10000).
    • Render doesn't support IPv6 addresses.
  • Render's port scan timed out before your service started listening on a port.
    • Keep your start command simple and defer any non-essential work until after your server starts listening.
    • Make sure to bind your host and port as early as possible in your application code.
  • Your service has conflicting port bindings.
    • If your start command creates a server listening on a port, don't start another listener in your application code.

Out of memory

Your instance ran out of memory during startup. See Memory exhaustion.

Exited with status <N>

Your application exited or crashed during startup.

See the exit code to identify the cause.

Timed out

Your instance was not ready before the deploy timed out. Common causes include:

  • Slow or blocking database queries or third-party API calls.
  • Slow or failing custom .
  • CPU exhaustion, which can slow your service's startup.

Image Pull Failed

Render couldn't pull your image from the external registry. For details, see Image pull failures.

Instance failures

An Instance Failed event occurs when your service's application exits unexpectedly, or when Render restarts it after repeated failures. Render automatically manages the instance lifecycle. Avoid manually terminating or restarting a failed instance as part of troubleshooting.

If your application exits unexpectedly, the event might include an exit code to help identify the cause.

If your service restarts due to health check failures, the event can include connection refused or i/o timeout errors. To determine the cause of the error:

Maximizing service availability

A properly configured service can remain responsive even while experiencing intermittent issues. Read Best Practices for Maximizing Uptime for guidance on instance scaling, retry logic, and other strategies for maintaining availability.

Health check errors

Render sends periodic health checks to web and private service instances to confirm they're healthy and able to receive traffic.

By default, health checks are TCP socket probes to one of your service's open ports. Web services can optionally add custom HTTP health checks to verify application-level readiness.

Render performs health checks as part of the deploy process and as part of the ongoing operation of a live service:

  • During a deploy, failed health checks prevent new instances from going live. See Startup failures.
  • On a live service, repeated health check failures trigger an automatic restart. See Instance failures.

For details on how Render responds to failed health checks on new deploys vs. actively running services, see Handling failures.

HTTP health check failures

A custom HTTP health check can fail during startup or while running, emitting an event with one of the following errors:

ErrorDescription

HTTP health check failed (timed out after 5 seconds)

Your health check timed out.

Check your instance's CPU and RAM usage to confirm you're not experiencing memory or CPU exhaustion.

We recommend a simple health check, such as a basic database query, to avoid the check itself timing out.

HTTP health check failed with status code <N>

Your health check endpoint returned a status code outside the 2xx to 3xx range.

Send a request to the endpoint and confirm the returned status code is healthy. Check your logs to see if there are HTTP error codes.

If you can't isolate your HTTP health check's repeated failures, consider temporarily removing it to keep your instances running. Render then falls back to the default TCP check.

Instance evictions

Render might automatically evict and replace instances that are unhealthy, or whose underlying infrastructure is unhealthy. A replacement instance spins up on its own and typically requires no action.

Repeated instance evictions can indicate that your service is exceeding the storage limit of its ephemeral filesystem. In this case, you can attach a persistent disk to increase available storage or write to a separate datastore, such as Render Postgres.

Memory exhaustion

When your service runs out of available memory while deploying or running, it can emit an event including an Out of memory (OOM) error.

An especially abrupt crash from a sudden memory spike might not appear in your service metrics.

Common causes of memory exhaustion include:

IssueDescription

Increased traffic

If your instance's memory usage spikes with increases in inbound traffic, consider scaling your service.

Memory leak

Memory usage that climbs steadily until the instance crashes typically indicates a leak.

Memory leaks are usually caused by a code or configuration issue. If the pattern started after a specific deploy, try rolling back to a version from before the issue started.

WEB_CONCURRENCY is too high (Python or Ruby)

Render can set a default WEB_CONCURRENCY based on your instance's available CPU.

If the default concurrency is too high for your app, your instance might run out of memory. Set a lower concurrency to reduce memory pressure.

JVM-based apps deployed via Docker

By default, apps written in Java, Kotlin, and Scala are memory-intensive.

We recommend upgrading your service to the 1c-2g or higher.

Node.js AI workflow tools

Tools such as n8n and Flowise are memory-intensive by default.

We recommend upgrading your service to the 1c-2g or higher.

Node.js heap limit too low

If your instance logs JavaScript heap out of memory errors, Node's heap limit might be lower than your instance's available memory.

Set --max-old-space-size=<megabytes> lower than your instance's available memory.

For example, if your instance has 4 GB of RAM, you'd set --max-old-space-size=3584. For additional examples, see this Stack Overflow discussion.

Application memory usage

If your instance’s memory usage spikes without a corresponding increase in inbound traffic, your application's behavior (such as background work, caching, or memory retention) might be contributing.

Add logging or monitoring to track memory usage and help identify when spikes occur. For complex issues, consider using an Application Performance Monitor (APM).

CPU exhaustion

CPU exhaustion occurs when your service exceeds its CPU limits while deploying or running. Review your service's metrics to diagnose CPU issues.

CPU exhaustion can lead to other issues, such as health check errors and memory exhaustion.

Common causes of CPU exhaustion include:

IssueDescription

Increased or spiking traffic

If your instance's CPU usage climbs with sustained increases in inbound traffic, consider scaling your service.

For sudden traffic spikes, run load tests with burst-like traffic to choose a that handles your service's peak demand without exceeding limits.

Stuck workers or threads

Long-running database queries and API calls can reduce throughput and spike CPU usage from retries.

Keep workers from becoming overloaded by:

  • Setting explicit dependency timeouts to prevent stuck requests (e.g., the Gunicorn timeout parameter).
  • Using horizontal scaling to increase your service's request capacity.
  • Adjusting your app's concurrency settings so each instance handles a manageable number of requests at once.
    • For Ruby and Python services, you can set this with the WEB_CONCURRENCY .

Inefficient Postgres queries

Slow queries, lock contention, or missing indexes can increase your Postgres instance's CPU usage.

See PostgreSQL performance troubleshooting.

Concurrent one-off jobs

Running too many one-off jobs at once can cause your instance's CPU usage to spike.

Trigger jobs in smaller, staggered batches to reduce peak CPU demand.

Exit codes

If your service's application exits, Render might include its exit code in the corresponding Deploy Failed or Instance Failed event.

Common exit codes include:

Exit code 0

Your app exited "successfully" but early. , , and all run continuously and should never exit unless they receive a SIGTERM signal.

For workloads that exit after their task is complete, use a or instead of a continuously running service type.

HTTP error codes

Many common runtime issues surface as HTTP error codes returned to your browser or other client. For browser errors, the Network panel of your browser's developer tools shows error details.

The most common error codes are:

400 Bad Request

Your service received an invalid request. Common causes include:

  • The request is missing required parameters.
  • An API endpoint expects a JSON request body, but receives HTML or another format instead.
  • A request's URL is malformed or incorrectly encoded.

A 400 error also occurs when a Django app doesn't include its associated custom domain in its ALLOWED_HOSTS setting.

When to contact support

Our support team is available and happy to assist with issues that pertain to the capabilities, conventions, and underlying infrastructure of the Render platform.

Our support team is not able to assist with issues specific to your application's code, such as:

  • Application-level debugging and optimization
  • Software architecture and design
  • Library- and framework-specific behaviors

For help with issues like those above, please consult resources that specialize in these forms of assistance.

For issues specifically related to the Render platform, reach out to our support team in the Render Dashboard.