
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.
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:
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.
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.
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.
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.
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.
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.
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.
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.
For WordPress, delete the .maintenance file or deactivate any maintenance mode plugins.
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.
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.
A subdomain takeover lets an attacker claim your subdomain by exploiting dangling DNS records. Learn how it happens, real-world examples, and how DNS monitoring detects it.
Read moreMean time to detect (MTTD) measures how long it takes to discover an incident after it starts. Reducing MTTD is one of the highest-leverage improvements in reliability engineering.
Read moreBlack box monitoring tests your systems from the outside, the way users experience them — without access to internal code or infrastructure. Learn how it works and when to use it.
Read moreLooking to monitor your website and domains? Join our platform and start today.