You're getting a 503 Service Unavailable on your WordPress site. Server's alive—you can SSH in, ping works, maybe even phpMyAdmin loads. But the site itself? Dead. Usually happens after you updated a plugin, installed something new, or your site got a sudden traffic spike. Had a client last month whose e-commerce site dropped to 503 right after a WooCommerce update. Took me 20 minutes to trace it to a PHP process that hung because of a memory limit hit.
What Actually Causes a 503 Error on WordPress
A 503 isn't a crash. It's your web server saying "I'm overloaded or broken, try later." In WordPress, that usually means PHP-FPM or Apache hit its process limit, or a plugin threw a fatal error that killed the PHP worker. The server is fine—the application layer broke.
Three most common triggers:
- Plugin conflict — a plugin that's poorly coded or incompatible with your PHP version (7.4 vs 8.0, for example).
- PHP process exhaustion — happens when too many requests come in and PHP-FPM runs out of child processes. Common on cheap shared hosting.
- Maintenance mode stuck — the .maintenance file gets left behind after an update.
Step-by-Step Fix (Do These in Order)
Step 1: Kill the Stuck Maintenance Mode
First check if WordPress thinks it's still updating. SSH into your server (or use cPanel file manager) and look for a file called .maintenance in the WordPress root directory. If it's there, delete it:
cd /var/www/html
rm -f .maintenance
Then reload the site. If it works, you're done. If not, move on.
Step 2: Check PHP-FPM Status
If you have root access, run this to see if PHP-FPM is actually running:
systemctl status php8.1-fpm
Replace 8.1 with your PHP version. If it shows "active (running)", check the process pool:
ps aux | grep php-fpm | wc -l
That number should be under 30 or so. If it's 100+, your PHP processes are hanging. Restart PHP-FPM:
systemctl restart php8.1-fpm
Then reload the site. If it works but breaks again within a minute, you've got a plugin eating processes.
Step 3: Temporarily Disable All Plugins (Without WP Admin)
You can't get into wp-admin because of the 503. So do it the old-school way. Rename the plugins folder:
cd /var/www/html
mv wp-content/plugins wp-content/plugins_off
Create a new empty plugins folder:
mkdir wp-content/plugins
Now reload the site. If it comes back, a plugin caused it. Rename the folder back and reactivate plugins one by one to find the culprit:
mv wp-content/plugins_off wp-content/plugins
Then manually enable each plugin via wp-admin.
Step 4: Increase PHP Memory Limit
Low memory can also trigger 503s on larger sites. Edit your wp-config.php file and add this line just before the /* That's all, stop editing! */ comment:
define('WP_MEMORY_LIMIT', '256M');
This won't fix a broken plugin, but it'll prevent future memory-related 503s.
Step 5: Check Apache/Nginx Error Logs
You need to see exactly what's failing. Look in:
- Apache:
/var/log/apache2/error.log - Nginx:
/var/log/nginx/error.log - PHP:
/var/log/php8.1-fpm.log
Run this to see the last 20 lines:
tail -20 /var/log/apache2/error.log
You'll often see something like PHP Fatal error: Allowed memory size exhausted or PHP Fatal error: Uncaught Error: Call to undefined function. That's your smoking gun.
If It Still Fails
If none of this worked, you're dealing with one of these:
- Server resource exhaustion — check
free -mfor RAM usage. If it's pegged at 100%, you need to upgrade your hosting plan. - A corrupted .htaccess file — rename it to
.htaccess_oldand see if that helps. WordPress will recreate it when you save permalinks. - A reverse proxy issue — if you're behind Cloudflare or Varnish, try accessing the server's IP directly to bypass the proxy.
- Your web server is crashed — run
systemctl restart apache2orsystemctl restart nginx. Sometimes it just needs a kick.
One last thing: if you're on shared hosting and you've done all this, it's probably your host hitting PHP process limits. Call them and ask them to increase pm.max_children in PHP-FPM. Most won't do it for shared plans, but it's worth asking.
I've fixed dozens of 503 errors on WordPress sites. 90% of the time it's a plugin gone rogue or a PHP-FPM pool that choked. Start with the plugins folder rename—it's the fastest test.