HelpWithWebGet Help Now
← Back to Blog
Server7 min read

Website Down? How to Diagnose What's Wrong on Your Server

Site offline and you don't know why? Here's the exact sequence of checks to run — from DNS to web server to database — to find the issue fast.

ByDino Bartolome

Your site is down and you're getting calls. Before you panic-restart everything, here's the systematic sequence of checks to find *what's actually broken* — in order, from cheapest to most-expensive to investigate.

Level 1: Is it really down?

Check from a different network (mobile data, incognito, different location). Use:

  • DownForEveryoneOrJustMe.com — confirm it's not just you
  • UptimeRobot or Pingdom — historical uptime data

If it loads elsewhere, the problem is your network or ISP — not the site.

Level 2: DNS working?

`` dig yourdomain.com ``

If this returns no answer or NXDOMAIN, your DNS is broken. Common causes:

  • Domain expired
  • Nameservers changed or wrong
  • DNS host outage
  • Recent DNS change still propagating (up to 48h for TTLs)

Level 3: Can you reach the server at all?

`` ping your.server.ip ``

No response? The server itself is unreachable. Check:

  • Can you log in via your hosting control panel?
  • Is the server even running? (Restart from panel if needed)
  • Are firewall rules blocking all traffic?
  • Is the data center having an outage? (Check their status page)

Level 4: Can you SSH in?

`` ssh user@your.server.ip ``

  • If SSH hangs or times out:
  • Server is probably swapping heavily or out of memory
  • Or firewall is blocking port 22

If SSH works, move on. You can diagnose from here.

Level 5: Is the web server running?

`` sudo systemctl status nginx sudo systemctl status apache2 ``

If it's not running, check why:

`` sudo journalctl -u nginx --since "10 minutes ago" ``

Common failures: syntax error in config, port conflict, SSL cert issue, out of memory during startup.

Level 6: Is your app running?

For a Node/Python/Ruby app running as a service:

`` sudo systemctl status your-app ``

If it's crashed, the logs will tell you why:

`` sudo journalctl -u your-app --since "10 minutes ago" -n 100 ``

Look for OOM (out of memory), unhandled exceptions, or database connection errors.

Level 7: Is the database running?

`` sudo systemctl status mysql sudo systemctl status postgresql ``

  • Databases usually stay up — but they can crash if:
  • Out of disk space
  • Out of memory
  • Corruption (rare)

Level 8: Check resource limits

`` df -h # disk space free -h # memory uptime # load average top # what's running ``

  • Watch for:
  • Disk full: services can't log, databases can't write → cascading failure
  • Memory full: OOM killer kills random processes (usually the biggest ones)
  • High load: something is hammering the CPU

Level 9: Check for attacks

`` sudo tail -f /var/log/nginx/access.log | grep -v "healthcheck" ``

If you see a flood of requests hitting the same endpoint, you may be under a DDoS or crawl attack. Quick fix: put Cloudflare in front (free tier works) or rate limit at the server.

Level 10: When nothing obvious is wrong

If everything *looks* fine but the site still isn't responding:

  • Check whether your cloud provider has a status banner
  • Check if a cert just expired (browsers will refuse to load)
  • Check that DNS A record still points at the current server IP
  • Check recent config changes — someone's "small tweak" last night?

The golden rule

Stop. Look at logs. Then touch something.

Don't start restarting services hoping it fixes it. Every restart can mask the real cause and make diagnosis harder.

Need help?

If your site is down right now and you can't figure it out, I can jump on it. Most outages take less than an hour to diagnose once you know where to look. Send me a message with what you've tried.

Need Help With Your Website?

I fix these problems every day. Send me a message and I'll take a look.

Get Help Now