Skip to content

Connection timeout

Your server isn't replying at all — requests vanish without a response until the timeout window closes. Your site shows as Down in DomainDash.

Symptom

  • DomainDash marks the uptime check as Down with error code connection_timeout
  • Browser shows "ERR_CONNECTION_TIMED_OUT" or "This site can't be reached" after a long wait (typically 30+ seconds)
  • Running curl -v --max-time 30 https://example.com hangs until it eventually times out with "Operation timed out"
  • Unlike a connection refusal, there is no instant failure — the request disappears without a reply

What it means

A timeout means DomainDash sent a request and waited — up to roughly 10–30 seconds — but received nothing back. This is the opposite of a connection refused error, where the server replies immediately with "no". Here, the server either accepted the TCP connection and then went silent, or the request never arrived at all because something on the network swallowed it.

The root cause is almost always one of three things: the server is overwhelmed and can't process requests in time, an application or dependency is deadlocked, or a firewall is silently dropping packets instead of actively refusing them (a "black hole" route).

This is also different from a slow response: a slow response means the server eventually replied but took too long. A timeout means no reply arrived within the window at all.

Common causes

  • Server CPU or memory is exhausted — the OS can't schedule the request in time
  • Application is deadlocked or blocked on a long-running database query or external API call
  • An upstream dependency (database, cache, third-party API) is down or very slow, causing every request to queue and wait
  • A firewall or security group is silently dropping packets rather than actively refusing them — often a misconfigured rule or an accidental "deny all" added to a cloud security group
  • The server is under a distributed denial-of-service (DDoS) attack or unusual traffic spike
  • An oversaturated network link — the server's provider is experiencing congestion

How to fix

  1. Confirm it's a timeout, not a refusal. Run:

    bash
    curl -v --max-time 30 https://example.com

    A timeout hangs silently and then fails after the time limit expires. If it fails instantly with "Connection refused", see the connection refused page instead.

  2. Check server CPU and memory. SSH in and run:

    bash
    top

    Look for CPU at or near 100%, memory so full the system is swapping, or any process in D state (uninterruptible sleep, usually waiting on disk I/O). For a quick five-second snapshot:

    bash
    vmstat 1 5

    If the server is overloaded, the most immediate fix is to restart the application process and investigate whether you need to scale up.

  3. Check application and dependency health. Review recent application logs for stuck requests or error storms. For PostgreSQL, find long-running or waiting queries:

    bash
    SELECT pid, now() - pg_stat_activity.query_start AS duration, query
    FROM pg_stat_activity
    WHERE state = 'active'
    ORDER BY duration DESC;

    For MySQL: SHOW PROCESSLIST;. A query running for several minutes is a strong indicator.

  4. Look for traffic spikes or a DDoS. Check your web server access logs:

    bash
    tail -100 /var/log/nginx/access.log

    A flood of requests from a small number of IPs, or a sudden spike in overall request rate, can exhaust the server's connection pool. Consider enabling rate-limiting, or temporarily blocking the source ranges at your firewall or CDN.

  5. Restart and re-verify. Once you've identified the cause, restart the affected process:

    bash
    sudo systemctl restart nginx
    # or your application process manager, e.g.
    pm2 restart all

    Then confirm the server replies promptly:

    bash
    curl -v --max-time 10 https://example.com

How to verify

After fixing:

  1. Run curl -v --max-time 10 https://example.com — it should return a response within a few seconds.
  2. Load the site in a fresh browser window — it should load normally.
  3. In DomainDash, go to the site's uptime tab and click "Check now". Status should flip from Down to Healthy.

Monitor your websites for free

DomainDash checks your uptime, SSL, DNS, and domain registration so you don't have to. Set up in under a minute.