It feels like there is no more need of adding a swap practice, especially today, deploying VMs in the cloud, considering the abundance of memory, disk and vCPUs resources that are available on-demand. But, for those out there who wants to trade a “bit” of a disk space for a few extra GBs of memory while running CentOS 7, the steps are described below.
Prerequisites
- CentOS 7
- sudo permissions
Solution
initial checks
Step 1. Check first if swap is already enabled.
swapon -s
cat /proc/swaps
Step 2. Check VM’s overall memory.
free -mh
Example output:
total used free shared buff/cache available
Mem: 15G 410M 13G 1.2M 1.6G 14G
Swap: 0B 0B 0B
Step 3. Check available storage space.
df -h
configuring swap
Step 1. Before going any further, the kicker here is to find how much swap space is enough for a certain memory size. I’ve dug the following recommended practice:
- Less than 2GB of RAM = 2x RAM
- Between 2GB and 8GB = 1x RAM
- Between 8GB and 64GB = Equal or more than 4GB, it depends.
- More than 64GB = Equal or more than 4GB, it depends.
In my case, with 16GB of RAM, initially I’ll settle with 4GB of swap space.
Step 2. Run the following command to create a swap file.
sudo dd if=/dev/zero of=/swapfile bs=256M count=16
256MBx16 = 4096MB
Another option to consider is the optimal block size (bs
), which in my example is set to 256MB. However, it depends on several factors, including: the OS, disks, filesystem, workload type, among others. I believe the default value is 128MB. Anyhow, there are few bash scripts you could find on the Internet to calculate the “optimal” block size.
Step 3. Update the file permissions:
sudo chmod 600 /swapfile
Step 4. Configure a Linux swap area:
sudo mkswap /swapfile
Step 5. Activate the swap at once:
swapon /swapfile
Step 6. Verify:
sudo swapon -s
Step 7. Apply swap changes to be permanent, so you won’t lose the swap configuration after reboot. Open the /etc/fstab
file and add the following line:
/swapfile swap swap defaults 0 0
Step 8. Confirm the memory too:
free -mh
swappiness
Swappiness enumerate how often the system will use the swap space. You can find the default value, by running:
cat /proc/sys/vm/swappiness
If you want to configure a higher or a lower number, update the vm.swappiness
parameter found under the /etc/sysctl.conf
file.
As with the swap space and block sizes, swappiness value depends on multiple things. You have to test, experiment to find the optimal value. Even so, I would suggest not to put many hours in, just for the swap space optimization itself.
disable and remove a swap space
Step 1. Disable swap:
sudo swapoff -v /swapfile
Step 2. Remove the swap entry /swapfile swap swap defaults 0 0
from the /etc/fstab
file.
Step 3. Finally, delete the swap file:
rm /swapfile
Conclusion
If you have any other great solutions on this topic, or even issues, feel free to leave a comment below and if you find this tutorial useful, follow our official channel on Telegram.