Check the System for Swap Information
Before we begin, we should take a look at our server’s storage to see if we already have some swap space available. While we can have multiple swap files or swap partitions, one should generally be enough.
We can see if the system has any configured swap by using
swapon, a general-purpose swap utility. With the
swapon will display a summary of swap usage and availability on our storage device:
If nothing is returned by the command, then the summary was empty and no swap file exists.
Another way of checking for swap space is with the
free utility, which shows us the system’s overall memory usage. We can see our current memory and swap usage (in megabytes) by typing:
total used free shared buffers cached Mem: 3953 315 3637 8 11 107 -/+ buffers/cache: 196 3756 Swap: 0 0 4095
As you can see, our total swap space in the system is 0. This matches what we saw with
Check Available Storage Space
The typical way of allocating space for swap is to use a separate partition that is dedicated to the task. However, altering the partition scheme is not always possible due to hardware or software constraints. Fortunately, we can just as easily create a swap file that resides on an existing partition.
Before we do this, we should be aware of our current drive usage. We can get this information by typing:
Filesystem Size Used Avail Use% Mounted on /dev/vda1 59G 1.5G 55G 3% / devtmpfs 2.0G 0 2.0G 0% /dev tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 2.0G 8.3M 2.0G 1% /run tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
-h flag simply tells
dh to output drive information in a human-friendly reading format. For example, instead of outputting the raw number of memory blocks in a partition,
df -h will tell us the space usage and availability in M (for megabytes) or G (for gigabytes).
As you can see on the first line, our storage partition has 59 gigabytes available, so we have quite a bit of space to work with. Keep in mind that this is on a fresh, medium-sized VPS instance, so your actual usage might be very different.
Although there are many opinions about the appropriate size of a swap space, it really depends on your application requirements and your personal preferences. Generally, an amount equal to or double the amount of memory on your system is a good starting point.
Since my system has 4 gigabytes of memory, and doubling that would take a larger chunk from my storage space than I am willing to part with, I will create a swap space of 4 gigabytes to match my system’s memory.
Create a Swap File
Now that we know our available storage space, we can go about creating a swap file within our filesystem. We will create a file called
swapfile in our root (
/) directory, though you can name the file something else if you prefer. The file must allocate the amount of space that we want for our swap file.
The fastest and easiest way to create a swap file is by using
fallocate. This command creates a file of a preallocated size instantly. We can create a 4 gigabyte file by typing:
sudo fallocate -l 4G /swapfile
After entering your password to authorize
sudo privileges, the swap file will be created almost instantly, and the prompt will be returned to you. We can verify that the correct amount of space was reserved for swap by using
ls -lh /swapfile
-rw-r--r-- 1 root root 4.0G Oct 30 11:00 /swapfile
As you can see, our swap file was created with the correct amount of space set aside.
Enable a Swap File
Right now, our file is created, but our system does not know that this is supposed to be used for swap. We need to tell our system to format this file as swap and then enable it.
Before we do that, we should adjust the permissions on our swap file so that it isn’t readable by anyone besides the root account. Allowing other users to read or write to this file would be a huge security risk. We can lock down the permissions with
sudo chmod 600 /swapfile
This will restrict both read and write permissions to the root account only. We can verify that the swap file has the correct permissions by using
ls -lh again:
ls -lh /swapfile
-rw------- 1 root root 4.0G Oct 30 11:00 /swapfile
Now that our swap file is more secure, we can tell our system to set up the swap space for use by typing:
sudo mkswap /swapfile
Setting up swapspace version 1, size = 4194300 KiB no label, UUID=b99230bb-21af-47bc-8c37-de41129c39bf
Our swap file is now ready to be used as a swap space. We can begin using it by typing:
sudo swapon /swapfile
To verify that the procedure was successful, we can check whether our system reports swap space now:
Filename Type Size Used Priority /swapfile file 4194300 0 -1
This output confirms that we have a new swap file. We can use the
free utility again to corroborate our findings:
total used free shared buffers cached Mem: 3953 315 3637 8 11 107 -/+ buffers/cache: 196 3756 Swap: 4095 0 4095
Our swap has been set up successfully, and our operating system will begin to use it as needed.
Make the Swap File Permanent
Our swap file is enabled at the moment, but when we reboot, the server will not automatically enable the file for use. We can change that by modifying the
fstab file, which is a table that manages filesystems and partitions.
Edit the file with
sudo privileges in your text editor:
sudo nano /etc/fstab
At the bottom of the file, you need to add a line that will tell the operating system to automatically use the swap file that you created:
/swapfile swap swap sw 0 0
When you are finished adding the line, you can save and close the file. The server will check this file on each bootup, so the swap file will be ready for use from now on.