Browser showing a 503 Service Unavailable error message
# website errors# troubleshooting

503 Service Unavailable: What It Means and How to Fix It

A 503 Service Unavailable error means the server is up and running but temporarily unable to handle the request. It's one of the more honest HTTP errors — the server knows it's struggling and is telling you so.

Unlike a 500 error (which means something broke unexpectedly), a 503 is often deliberate — the server is refusing new requests because it's overloaded, in maintenance, or has run out of workers to handle them.

What Causes a 503 Error?

1. Server Is Overloaded

The most common cause. When a server receives more requests than it can process simultaneously, new requests queue up. If the queue fills up too, the server starts returning 503 instead of making visitors wait indefinitely.

This often happens during:

  • A traffic spike (viral content, a big sale, a marketing campaign)
  • A DDoS attack
  • A runaway process consuming excessive resources

2. Web Server Has Run Out of Workers

PHP-FPM, Gunicorn, uWSGI, and similar process managers have a limit on how many requests they can handle at once. When all workers are busy, new requests get a 503.

Check PHP-FPM status:

sudo systemctl status php8.2-fpm
sudo tail -f /var/log/php8.2-fpm.log

If the log shows "max children reached", you've hit your worker limit.

3. Maintenance Mode

Many CMS platforms (WordPress, Magento, etc.) put the site in maintenance mode during updates, returning 503 to tell search engines and visitors to come back later. If maintenance mode wasn't automatically disabled after an update, it'll keep returning 503.

WordPress: Check if a .maintenance file exists in your site root:

ls /var/www/yoursite/.maintenance

Delete it if the update has completed.

4. Application Startup Failure

If your application (a Node.js server, a Django app, etc.) fails to start — perhaps due to a bad deployment or missing environment variable — no requests can be processed. The web server returns 503 because there's nothing to pass the request to.

5. Database Unavailable

Many applications return 503 if they can't reach the database, rather than returning a 500. This is good practice — it signals a temporary issue rather than an application crash.

Check your database server is running and accepting connections.

How to Fix a 503 Error

Step 1: Check Application and Server Logs

sudo tail -f /var/log/nginx/error.log
sudo tail -f /var/log/apache2/error.log
sudo journalctl -u your-app -f

The logs will almost always tell you the specific reason.

Step 2: Check Server Resources

top          # CPU and memory usage
free -h      # Available RAM
df -h        # Disk space

If the server is maxed out, you need to either reduce load or scale up resources.

Step 3: Increase Worker Counts (Carefully)

If PHP-FPM workers are exhausted, increase pm.max_children in your pool config:

pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20

Be careful — more workers means more memory usage. Don't set this higher than your RAM can support.

Step 4: Restart the Application

sudo systemctl restart php8.2-fpm
sudo systemctl restart nginx
sudo systemctl restart your-app

Sometimes a clean restart is all that's needed, especially after a deployment.

Step 5: Disable Maintenance Mode

For WordPress, delete the .maintenance file or deactivate any maintenance mode plugins.

503 and SEO

One thing worth noting: a 503 is the correct response to serve during planned maintenance. Unlike a 500 error, search engines understand that a 503 is temporary and won't immediately penalise your rankings. They'll retry crawling soon.

However, extended 503s — anything lasting more than a few hours — will start to affect your search visibility. Google's crawlers give up and assume the page is gone. This is why monitoring your uptime matters even during planned maintenance windows.

Keep an Eye on 503s With Monitoring

A 503 that lasts 30 seconds during a traffic spike is one thing. A 503 that runs for three hours while you're asleep is a real problem.

Domain Monitor checks your site every minute and alerts you instantly if it starts returning errors — so you can respond before the problem becomes an incident. Pair that with our downtime alert setup guide to make sure the right people are notified every time.

More posts

What Is Generative AI? How It Works and What It Creates

Generative AI creates new content — text, images, code, and more. This guide explains how it works, what tools are available, and where it's genuinely useful versus overhyped.

Read more
What Is Cursor AI? The AI Code Editor Explained

Cursor AI is an AI-powered code editor built on VS Code. Learn what it does, how it works, and whether it's the right tool for your development workflow.

Read more
What Is Claude Opus? Anthropic's Most Powerful Model Explained

Claude Opus is Anthropic's most capable AI model, built for complex reasoning and demanding tasks. Learn what it does, how it compares, and when to use it.

Read more

Subscribe to our PRO plan.

Looking to monitor your website and domains? Join our platform and start today.