When do I upgrade my server? How do I understand the graphs (are there any documents)?

March 27, 2019 281 views
Server Optimization Debian

I am new to server management. I love the platform and the pricing, but I'm disappointed in the FAQ's and documentation. I can't find any source on the question "When is it the right time to upgrade my server?" or documentation explaining how to understand the server graphs. Any expert advice? My CPU usage now reaches 20-35%. And memory 65-75%. Of course, memory and CPU is easy to understand, but I don't know at what percentage I should upgrade. And Disk I/O and bandwidth? How much is low, medium, or high usage? Any commands to figure out max I/O and bandwidth?

2 Answers
jarland MOD March 28, 2019
Accepted Answer

Greetings!

This is a great question. Sadly, there is no way to answer it clearly, because this is an issue that is relative to factors which have seemingly unlimited variables. I'll give you an example of what I mean, and I'm going to use the example of a website being the application in question (because I can't really know if this is what you do with your droplet).

Right now you might be using 50% of your memory, but why? What is using that 50%? Do you ever spike higher than that and, if so, what causes that spike? Is that cause something which is elevated by external factors (website visitors) or internal factors (cron jobs)? This can matter because external factors, like website visitors, are largely beyond your control. So you need to plan ahead for the traffic you want to be able to handle, if you can draw a reasonable correlation to memory usage per website visitor. If it's caused by internal factors, these are within your control, and you can tweak them as needed to keep you from having to upgrade (or at least plan your upgrades).

It isn't uncommon for many people to not upgrade until they hit a resource cap that causes performance issues with their application. It also isn't uncommon for them to not know that this was about to happen. You can't come right out and say something like "X website visitors equals Y memory usage" because web applications are things that vary so dramatically that one website may use 1MB of memory per visitor, while another may use 256MB of memory per visitor. So it's a legitimate question to wonder how they were supposed to know better beforehand.

The best advice I could offer someone, using a website as my example, would be to watch memory usage in correlation with application usage, and then try to say "X visitors equals Y memory usage." Then, you might have a baseline to help you know when to upgrade. Even still, one page of your website could use more memory than another because of how it loads on the back-end, so this isn't an exact science. Poorly optimized applications can also change this math over time, one example being a website that reads/writes to a database table on every visit therefore increasing overhead per page load over time (I've only seen this a few hundred times).

Besides doing your best at math, you should monitor your application and watch for problems that you hit. When problems occur, you look for the best solution. Maybe, at that time, upgrading is the solution. If it is a website, something like UptimeRobot can help you to be alerted when your website is down. You can use data like that, in correlation with digging through your application logs, to find out what might have happened.

There is no "one size fits all" solution here, and everything I've given above is intentionally a bit vague. This is something you will make personal decisions about as you go, and there is rarely only one right answer for how to solve problems from increased usage.

As for disk IO and bandwidth, I recommend "iotop" (disk) and "vnstat" (network) for monitoring these things. It's unlikely you need to be looking at disk IO, and bandwidth is rarely an issue for someone not running things like VPN, TOR, BitTorrent, etc.

I hope that at least helps some :)

Jarland

Yes, it does! Thanks. I am running about 18 WordPress sites on my server. But I have never reached even 80% memory usage, so I guess I'm good for now.

But how do I monitors 18 websites traffic vs memory, do I have to do this manually? Add up all the visitors on the sites and see the memory?

  • What I think I would do, just to get a rough idea, is to watch "htop" in an SSH terminal while using something like loadimpact.com to simulate website traffic. It's certainly not a pretty way to handle it, but I'm not sure there really is an attractive method.

Have another answer? Share your knowledge.