What is Minimal Compute
This guide is aimed at servers with minimal compute for this i consider anything with less than 2 cores or less than 4GB of ram. For the guide I will be using the free compute Oracle gives you which is 1/8th of a CPU and 1GB of memory. If you are running this on your own hardware I would recommend installing Alpine Linux instead. The reason I made this guide is for people who are running their server in the cloud because they may not have the option of using Alpine. This is what I did when setting up the Ubuntu Server that this is running on.
The Two Constraints
So when we are optimising there are two main constraints: one is CPU it can only do so many instruction, two would be memory there is only so much which can be stored.
Memory
Swap
When dealing with minimal memory we want to make sure the server does not crash, because it ran out of memory even if that means it's slower. To alleviate this we will create a swap, which means when the memory is close to full it will move the least important things onto the disk. While the disk is slower it can save the server from crashing. Due to us only creating 2GB and we are doing this with a cloud VPS the Drive it uses will be plenty fast the main issues with be latency.
First we will reserve 2G for the swap:
sudo fallocate -l 2G /swapfile
Then will make sure it has the read/write permissions:
sudo chmod 600 /swapfile
Next we Need to tell the Linux kernel that this file is for virtual memory:
sudo mkswap /swapfile
Next we need to activate the swap file:
sudo swapon /swapfile
In order to confirm this worked you can run:
free -h
If it worked you should have something like this:
total used free
Mem: 952Mi 188Mi 137Mi
Swap: 2.0Gi 23Mi 2.0Gi
Great now this is working but it won't stick around if we reboot. In order to fix that issue we need to mount this swap file in our fstab:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Snap
Snap is a package manger mostly only used by Ubuntu most servers don't use snap. If you don't intend to use snap you can remove it to get a small memory reduction.
To start we want to remove any snaps installed:
snap list | awk 'NR>1{print $1}' | xargs -I {} sudo snap remove {}
Now that everything installed through snap is gone you can remove it through apt:
sudo apt purge -y snapd
That should have got rid of everything but snap has some dependences which may not get removed. To remove these we will scan for the packages that were installed as a dependency but are no longer needed:
sudo apt autoremove --purge -y
Well done you have now deleted snap.
If you ever want to use snap you can install it with:
sudo apt update && sudo apt install -y snapd
CPU
Disable Daily Upgrades
While Updating and Upgrading in the background can be good, if your server is already working to the max it can cause issues when you have little CPU power. But be careful if this is a public facing server i would recommend you setup a script to do updates when it has low CPU usage as this can be a security risk.
sudo systemctl disable --now unattended-upgrades.service
sudo systemctl disable --now apt-daily.timer
sudo systemctl disable --now apt-daily-upgrade.timer
If you Disable these make sure to be running updates and upgrades regularly:
sudo apt update && sudo apt upgrade -y
AppArmor
AppArmor is great and you should probably not disable it. But if your trying to get every tiny bit of performance and make sure all your other security is high it's most likely okay.
To disable AppArmor run this:
sudo systemctl disable --now apparmor
Conclusion
Now as i stated above you should probably be using Alpine Linux. But if you insist on using Ubuntu this how you can need to reduce the base line system usage of Ubuntu.
Top comments (0)