Introduction

In this article, we will go over how to create a swap file. A swap file is useful in instances where your VPS does not have enough memory to perform the tasks or processes that are running. This can cause your server to start killing processes in order to free up some memory, some of which may be important such as a database or a web server!

A swap file can help you avoid these issues by utilizing hard drive space as virtual memory when regular memory is not immediately available.

Adding a Swap file on Ubuntu 14.04

We must first make sure that there is no current swap file in use. The easiest way to determine this is to run the following command:

free -m

free -m output

free -m output

 

The output will show us how much memory the system has and how much, if any, swap has been configured. In this case, the VPS has just been provisioned, and no swap has been configured.

In the next step, we will choose the amount of space to allocate to swap. This can be accomplished by the following command:

dd if=/dev/zero of=/swapfile bs=1024 count=2048k

In this example, we will create a 2GB swap file. There are 1024 megabytes in 1 gigabyte, so in order to achieve 2GB I will be using 2048k as the count.

NOTE: Do not forget to include the “k” at the end, otherwise you will actually be creating a 2 megabyte swap file! This is because the byte size is being multiplied by the amount specified in the count block.

dd if=/dev/zero of=/swapfile bs=1024 count=2048k

dd if=/dev/zero of=/swapfile bs=1024 count=2048k

You can verify that you created the correct size by the output. Here we see 2.1 GB so we can continue to the next step.

Now we must assign the swap file we just created to the operating system:

mkswap /swapfile

mkswap /swapfile

mkswap /swapfile

Enable the swap file and verify it is assigned:

swapon /swapfilefree -m

mkswap /swapfile

mkswap /swapfile

The output of “free -m” should now show the amount you configured for swap.

Next, we need to configure the system to enable the swap file every time the server boots. Otherwise, you would need to manually enable it every time you reboot the server using the “swapon /swapfile” command.

To accomplish this we will need to edit the /etc/fstab file using a text editor of your choice.

Add the following line to the end of the file:

/swapfile none swap sw 0 0
/swapfile none swap sw 0 0

/swapfile none swap sw 0 0

Once this has been completed, save your changes and close the file.

 

After this is completed, you will still need to set the “swappiness.” By default, most Linux deployments have swappiness default to 60. This means that if 40% of RAM is used and 60% is unused, the swap file will be used. Since our cloud servers are all on SSD, our default swappiness is set to 0. What this means is that if 100% of all RAM is used, then and only then does the swap file get used.

Run the command:

nano /etc/sysctl.conf

Then change or add this line:

vm.swappiness = 10

If you need a slightly higher swap, you can play with this number. Try not to go higher than 20 or 30. We recommend swappiness be set low for multiple reasons. The first reason we recommend a low swappiness is that using it too aggressively will reduce the lifespan of the SSDs. The other reason is that if swappiness is set too high, the system uses the swap file too often. This can cause system input/output conflicts as the server is too busy swapping things in and out of the swap file, rather than  using the RAM properly. On occasion, this can slow down the server more than a lack of RAM.

Then you need to restart the swap file to take effect with the new settings. You can either reboot the server or run:

swapoff -a

and

swapon -a

 

That’s it! You now have a persistent swap file for your VPS.

 

*Note –These commands will work in a CentOS deployment as well*