If your server ever runs out of physical memory during heavy load, some critical services such as MySQL can crash (as I discovered the hard way!). In this guide we will set up some swap space on Ubuntu 20.04 & 18.04.
Just as a disclaimer, it is not recommend that you use swap space as a replacement to physical memory, especially on cloud hosting. If you are continuously eating into swap space, you should upgrade your physical memory. Swap should really only be a fall back in case memory usage peaks abnormally.
First check if the system has any swap configured.
If the output is blank, there is no swap configured so we can continue with this guide.
1. Create a Swap File
We will use the
fallocate program to create a swap file. Best practice is to create a swap file double the amount of your RAM. If you have 1024MB of RAM, create a 2GB swap file.
sudo fallocate -l 2G /swapfile
Now check if the file was created.
ls -lh /swapfile
If it was created correctly, you should see something like:
-rw-r--r-- 1 root root 2.0G Aug 3 18:59 /swapfile
2. Configure Swap File
Make the swap file only accessible to root.
sudo chmod 600 /swapfile
Mark the file as a swap file.
sudo mkswap /swapfile
If it was successful, you should see something like
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes) no label, UUID=00aafaee-51c9-46b3-a0fc-8240c134048e
Finally we will tell the system to start using our new swap file,
sudo swapon /swapfile
To verify that the swap is now available type:
sudo swapon --show
NAME TYPE SIZE USED PRIO /swapfile file 2G 0B -2
We can also run the following to see our new swap file alongside physical memory
total used free shared buff/cache available Mem: 985M 418M 104M 26M 462M 392M Swap: 2.0G 0B 2.0G
3. Make it Persistent
This swap will only last until next reboot. In order to make it permanent, we will add it to the
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
4. Some Final Tweaks
For a server, you should change the
swappiness value to 10.
sudo sysctl vm.swappiness=10
Now change the
vfs_cache_pressure value to 50.
sudo sysctl vm.vfs_cache_pressure=50
To make these two settings persist after next reboot, edit the following file:
sudo nano /etc/sysctl.conf
Add this to the bottom.
Save file and exit. (Press
Y and then press
If you can, reboot the server with
sudo reboot and run
sudo swapon --show just to make sure the swap space was created automatically on startup.
A useful way to keep an eye on your swap usage and system resources is to run