As a start, you need to look at the amount of memory each script consumes, ie. memory_limit and then divide the VMs memory by this. This should be the number of connections you can handle at the same time without running out of memory and therefore the server starting to do thrashing.
You will get to a very low amount of connections. So you need to
- increase memory
- decrease memory_limit
- make each connection finish faster
The next step would be to see if any database queries take longer than expected, I usually start looking with the mysql-slow.log at queries longer than 0.5s Also eliminate queries that don't use indexes if you can.
Next after this install a monitoring tool like collectd and see if there is enough CPU available.
From a business perspective, it depends if this is a new website/system or something existing. If it is new and growth is dramatic, you need to overspend on hardware for a while, a system that doesn't work or crashes under traffic erodes the trust in a business very fast. On top of that, its usually not worth it to optimise a lot if the hosting bill is under $1000 per month. If that is not affordable, then you may need to go back to your business model.