502 error with nginx - but snapshot on a new droplet works?

May 25, 2016 349 views
Nginx PHP WordPress MySQL Ubuntu 16.04


I set up a 512mb server with Ubuntu 16.04, nginx, MariaDB, php7, memcached etc. and it's working fine - for about 1 week. After that, my whole site goes down with a 502 error.

So far I found a workaround: If I take a snapshot and set up a new droplet with it....everything works! It's very strange. I think there is a memory leak or something similar at work.

I looked into the error logs and it seems that php is not working properly:

unix:/run/php/php7.0-fpm.sock failed (11: Resource temporarily unavailable) while connecting to upstream
unix:/run/php/php7.0-fpm.sock failed (2: No such file or directory) while connecting to upstream

I'm a beginner so I really don't know what to do. I would be glad if you have any ideas that could solve this problem.

1 Answer

Your droplet is probably using too much memory from all of the things you are running. You can confirm this on most OSes by grepping your logs (usually /var/log/syslog or /var/log/messages) for the word "killed" and seeing what the kernel OOM (out of memory) killer says about it.

The reason restoring from a snapshot works is because this reboots the droplet. Rebooting the droplet without restoring it would've had the same effect.

If you can get away with not running memcached, that would most likely reduce your memory usage. Also, MariaDB can usually be tuned to use less memory than stock. The other remaining option is to increase the size of your droplet by raising to the 1G plan. Some people may suggest adding swap instead, but it's pretty illogical to use the hard disk instead of real memory - it is extremely slow and not meant for regular usage.

Since you tagged your question Wordpress, I'm guessing you believed that adding caching to your site would make it faster. As you can see, there is a trade off and in this case it is memory.

  • Thank you for your detailed answer.

    I was thinking about the memory too and I checked how much is used with htop on both the old and the new droplet:

    Old: 256/489MB
    New: 204/489MB

    It doesn't seem that high...but I can only reach the new one without a 502.

    I forgot to mention that I have a 2GB swapfile already - it's working and consequently the VPS shouldn't crash when there's no memory, right?

    • I don't know about hypotheticals. I would check the logs and find out.

      • Sorry, I'm a real Linux noob - I'm sure many of my questions seem dumb.

        I checked most logs (php, access, error, mysql) and couldn't find any obvious crashes. However there was a warning in my php-log:

        WARNING: [pool www] server reached pm.max_children setting (5), consider raising it

        Something seems to eat my server's resources. The number of visitors on my site is currently under 1000 PER MONTH.

        I checked further and saw some suspicious access data that indicates an XML-RPC-attack. I'm not sure if this caused the problems but I secured my new VPS. My server is behind Cloudflare (only its IPs are whitelisted) so I'm still not sure if this is the root of my problems.

        In case my VPS down again I'll try a bigger droplet.

        • It's possible that a server overloaded with requests could fail to serve some. I don't really have good suggestions about Wordpress' XMLRPC, but you can google the problem easily as it is widespread. I forgot how I disabled it on my own server.

Have another answer? Share your knowledge.