Chapter 13. Getting started with swap
Swap space provides temporary storage for inactive processes and data when physical memory is full, helping prevent out‑of‑memory errors. It acts as extra memory, allowing the system to keep running. However, swap can slow performance, so optimize physical memory use first.
13.1. Overview of swap space Copy linkLink copied to clipboard!
Swap space in Linux is used when physical memory (RAM) is exhausted. When more memory is required and RAM is full, inactive memory pages are moved to swap. Swap helps systems with limited RAM but is no substitute for adding more actual memory.
Swap space is located on hard drives, which have a slower access time than physical memory. Swap space can be a dedicated swap partition (recommended), a swap file, or a combination of swap partitions and swap files.
In years past, the recommended amount of swap space increased linearly with the amount of RAM in the system. However, modern systems often include hundreds of gigabytes of RAM. As a consequence, recommended swap space is considered a function of system memory workload, not system memory.
13.2. Recommended system swap space Copy linkLink copied to clipboard!
The appropriate size of a swap partition ultimately depends on the system memory workload, not system memory alone. However, the following table provides the recommended minimum guidelines for swap partition size based on the amount of RAM in your system, which are typically set automatically during installation.
The swap partition size is set automatically during installation. To allow for hibernation, however, you need to edit the swap space in the custom partitioning stage.
The following guidelines are especially important on systems with low memory, such as 1 GB or less. Failure to allocate sufficient swap space on these systems can cause issues, such as instability or even render the installed system unbootable.
| Amount of RAM in the system | Recommended swap space | Recommended swap space if allowing for hibernation |
|---|---|---|
| Less than 2 GiB | 2 times the amount of RAM | 3 times the amount of RAM |
| 2 GiB – 8 GiB | Equal to the amount of RAM | 2 times the amount of RAM |
| 8 GiB – 64 GiB | At least 4 GiB | 1.5 times the amount of RAM |
| More than 64 GiB | Workload dependent (at least 4GiB) | Hibernation not recommended |
Distributing swap space over multiple storage devices improves swap space performance, particularly on systems with fast drives, controllers, and interfaces.
File systems and LVM2 volumes assigned as swap space should not be in use when being modified. Any attempts to modify swap fail if a system process or the kernel is using swap space. Use the free and cat /proc/swaps commands to verify how much and where swap is in use.
Resizing swap space requires temporarily removing it from the system, which is done by disabling the swap volume of the file by using the swapoff command. This can be problematic if running applications rely on the additional swap space and might run into low-memory situations.
If you encounter difficulties disabling swap due to high memory pressure or locked pages, alternatively, perform swap resizing from rescue mode. See Debug boot options. When prompted to mount the file system, select .
13.3. Creating an LVM2 logical volume for swap Copy linkLink copied to clipboard!
You can create an LVM2 logical volume for swap. Assuming /dev/VolGroup00/LogVol02 is the swap volume you want to add.
Prerequisites
- You have enough disk space.
Procedure
Create the LVM2 logical volume of size 4 GB:
lvcreate -n LogVol02 -L 4G VolGroup00
# lvcreate -n LogVol02 -L 4G VolGroup00Copy to Clipboard Copied! Toggle word wrap Toggle overflow Format the new swap space:
mkswap /dev/VolGroup00/LogVol02
# mkswap /dev/VolGroup00/LogVol02Copy to Clipboard Copied! Toggle word wrap Toggle overflow Add the following entry to the
/etc/fstabfile:/dev/VolGroup00/LogVol02 none swap defaults 0 0
/dev/VolGroup00/LogVol02 none swap defaults 0 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow Regenerate mount units so that your system registers the new configuration:
systemctl daemon-reload
# systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow Activate swap on the logical volume:
swapon -v /dev/VolGroup00/LogVol02
# swapon -v /dev/VolGroup00/LogVol02Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Verification
To test if the swap logical volume was successfully created and activated, inspect active swap space by using the following command:
cat /proc/swaps Filename Type Size Used Priority /dev/dm-6 partition 4194300 0 -2
# cat /proc/swaps Filename Type Size Used Priority /dev/dm-6 partition 4194300 0 -2Copy to Clipboard Copied! Toggle word wrap Toggle overflow free -h total used free shared buff/cache available Mem: 30Gi 1.2Gi 28Gi 12Mi 995Mi 28Gi Swap: 4.0Gi 0B 4.0Gi# free -h total used free shared buff/cache available Mem: 30Gi 1.2Gi 28Gi 12Mi 995Mi 28Gi Swap: 4.0Gi 0B 4.0GiCopy to Clipboard Copied! Toggle word wrap Toggle overflow
13.4. Creating and managing a standard swap partition Copy linkLink copied to clipboard!
Use a standard swap partition for swap space. You can use standard partitioning tools like fdisk or parted to create a dedicated partition.
Prerequisites
- You have enough unallocated disk space on a drive.
-
You have the name of the disk device, for example,
/dev/sda).
Procedure
Start the partitioning tool for your disk, for example,
/dev/sda:fdisk /dev/sda
$ fdisk /dev/sdaCopy to Clipboard Copied! Toggle word wrap Toggle overflow Create a new partition of the desired size and set its type to
Linux swap:NoteFor
fdisk, use the 't' command to change the partition type, entering the hex code82for Linux swap.- Write the changes and exit the utility.
Format the new swap partition (assuming the new partition is
/dev/sda4):mkswap /dev/sda4
# mkswap /dev/sda4Copy to Clipboard Copied! Toggle word wrap Toggle overflow Add an entry to the
/etc/fstabfile to enable the swap partition at boot time:/dev/sda4 none swap defaults 0 0
# /dev/sda4 none swap defaults 0 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow Regenerate mount units to register the new configuration:
systemctl daemon-reload
# systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow Activate the swap partition immediately:
swapon -v /dev/sda4
# swapon -v /dev/sda4Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Verification
To confirm the swap partition was created and activated, inspect the active swap space:
cat /proc/swaps free -h
# cat /proc/swaps # free -hCopy to Clipboard Copied! Toggle word wrap Toggle overflow
13.5. Creating a swap file Copy linkLink copied to clipboard!
Set up a swap file to provide virtual memory that prevents system crashes when physical RAM becomes full. This solution is particularly useful when you need additional swap space without repartitioning disks or modifying existing storage configurations.
Prerequisites
- You have enough disk space.
Procedure
- Determine the size of the new swap file in megabytes and multiply by 1024 to determine the number of blocks. For example, the number of 1024-byte sized blocks required for a 64 MB file is 65536.
Create an empty file:
dd if=/dev/zero of=/swapfile bs=1024 count=65536
# dd if=/dev/zero of=/swapfile bs=1024 count=65536Copy to Clipboard Copied! Toggle word wrap Toggle overflow Replace 65536 with the value equal to the required block size.
NoteOn modern filesystems such as ext4 or XFS,
fallocateis preferable instead ofdd. This method is faster and avoids unnecessary disk I/O.Set up the swap file with the command:
mkswap /swapfile
# mkswap /swapfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow Change the security of the swap file so it is not world readable.
chmod 0600 /swapfile
# chmod 0600 /swapfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow Edit the
/etc/fstabfile with the following entries to enable the swap file at boot time:/swapfile none swap defaults 0 0
/swapfile none swap defaults 0 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow The next time the system boots, it activates the new swap file.
Regenerate mount units so that your system registers the new
/etc/fstabconfiguration:systemctl daemon-reload
# systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow Activate the swap file immediately:
swapon /swapfile
# swapon /swapfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Verification
To test if the new swap file was successfully created and activated, inspect active swap space by using the following command:
cat /proc/swaps
$ cat /proc/swapsCopy to Clipboard Copied! Toggle word wrap Toggle overflow free -h
$ free -hCopy to Clipboard Copied! Toggle word wrap Toggle overflow
13.6. Creating a swap volume by using the storage RHEL system role Copy linkLink copied to clipboard!
You can use the storage RHEL system role to create or modify swap volumes on block devices.
Prerequisites
- You have prepared the control node and the managed nodes.
- You are logged in to the control node as a user who can run playbooks on the managed nodes.
-
The account you use to connect to the managed nodes has
sudopermissions for these nodes.
Procedure
Create a playbook file, for example,
~/playbook.yml, with the following content:Copy to Clipboard Copied! Toggle word wrap Toggle overflow The volume name (
swap_fsin the example) is currently arbitrary. Thestoragerole identifies the volume by the disk device listed under thedisks:attribute.For details about all variables used in the playbook, see the
/usr/share/ansible/roles/rhel-system-roles.storage/README.mdfile on the control node.Validate the playbook syntax:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Note that this command only validates the syntax and does not protect against a wrong but valid configuration.
Run the playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
13.7. Extending swap on an LVM2 logical volume Copy linkLink copied to clipboard!
You can extend swap space on an existing LVM2 logical volume. Assuming /dev/VolGroup00/LogVol02 is the volume you want to extend by 2 GB.
Prerequisites
- You have enough disk space.
Procedure
Disable swapping for the associated logical volume:
swapoff -v /dev/VolGroup00/LogVol02
# swapoff -v /dev/VolGroup00/LogVol02Copy to Clipboard Copied! Toggle word wrap Toggle overflow Resize the LVM2 logical volume by 2 GB:
lvresize -L +2G /dev/VolGroup00/LogVol02
# lvresize -L +2G /dev/VolGroup00/LogVol02Copy to Clipboard Copied! Toggle word wrap Toggle overflow Format the new swap space:
mkswap /dev/VolGroup00/LogVol02
# mkswap /dev/VolGroup00/LogVol02Copy to Clipboard Copied! Toggle word wrap Toggle overflow Enable the extended logical volume:
swapon -v /dev/VolGroup00/LogVol02
# swapon -v /dev/VolGroup00/LogVol02Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Verification
To test if the swap logical volume was successfully extended and activated, inspect active swap space:
cat /proc/swaps Filename Type Size Used Priority /dev/dm-6 partition 6291452 0 -2
# cat /proc/swaps Filename Type Size Used Priority /dev/dm-6 partition 6291452 0 -2Copy to Clipboard Copied! Toggle word wrap Toggle overflow free -h total used free shared buff/cache available Mem: 30Gi 1.2Gi 28Gi 12Mi 994Mi 28Gi Swap: 6.0Gi 0B 6.0Gi# free -h total used free shared buff/cache available Mem: 30Gi 1.2Gi 28Gi 12Mi 994Mi 28Gi Swap: 6.0Gi 0B 6.0GiCopy to Clipboard Copied! Toggle word wrap Toggle overflow
13.8. Reducing swap on an LVM2 logical volume Copy linkLink copied to clipboard!
You can reduce swap on an LVM2 logical volume. Assuming /dev/VolGroup00/LogVol02 is the volume you want to reduce.
Procedure
Disable swapping for the associated logical volume:
swapoff -v /dev/VolGroup00/LogVol02
# swapoff -v /dev/VolGroup00/LogVol02Copy to Clipboard Copied! Toggle word wrap Toggle overflow Clean the swap signature:
wipefs -a /dev/VolGroup00/LogVol02
# wipefs -a /dev/VolGroup00/LogVol02Copy to Clipboard Copied! Toggle word wrap Toggle overflow Reduce the LVM2 logical volume by 512 MB:
lvreduce -L -512M /dev/VolGroup00/LogVol02
# lvreduce -L -512M /dev/VolGroup00/LogVol02Copy to Clipboard Copied! Toggle word wrap Toggle overflow Format the new swap space:
mkswap /dev/VolGroup00/LogVol02
# mkswap /dev/VolGroup00/LogVol02Copy to Clipboard Copied! Toggle word wrap Toggle overflow Activate swap on the logical volume:
swapon -v /dev/VolGroup00/LogVol02
# swapon -v /dev/VolGroup00/LogVol02Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Verification
To test if the swap logical volume was successfully reduced, inspect active swap space by using the following command:
cat /proc/swaps
$ cat /proc/swapsCopy to Clipboard Copied! Toggle word wrap Toggle overflow free -h
$ free -hCopy to Clipboard Copied! Toggle word wrap Toggle overflow
13.9. Removing an LVM2 logical volume for swap Copy linkLink copied to clipboard!
You can remove an LVM2 logical volume for swap. Assuming /dev/VolGroup00/LogVol02 is the swap volume you want to remove.
Procedure
Disable swapping for the associated logical volume:
swapoff -v /dev/VolGroup00/LogVol02
# swapoff -v /dev/VolGroup00/LogVol02Copy to Clipboard Copied! Toggle word wrap Toggle overflow Remove the LVM2 logical volume:
lvremove /dev/VolGroup00/LogVol02
# lvremove /dev/VolGroup00/LogVol02Copy to Clipboard Copied! Toggle word wrap Toggle overflow Remove the following associated entry from the
/etc/fstabfile:/dev/VolGroup00/LogVol02 none swap defaults 0 0
/dev/VolGroup00/LogVol02 none swap defaults 0 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow Regenerate mount units to register the new configuration:
systemctl daemon-reload
# systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Verification
Test if the logical volume was successfully removed, inspect active swap space by using the following command:
cat /proc/swaps
$ cat /proc/swapsCopy to Clipboard Copied! Toggle word wrap Toggle overflow free -h
$ free -hCopy to Clipboard Copied! Toggle word wrap Toggle overflow
13.10. Removing a swap file Copy linkLink copied to clipboard!
You can remove a swap file.
Procedure
Disable the
/swapfileswap file:swapoff -v /swapfile
# swapoff -v /swapfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
Remove its entry from the
/etc/fstabfile accordingly. Regenerate mount units so that your system registers the new configuration:
systemctl daemon-reload
# systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow Remove the actual file:
rm /swapfile
# rm /swapfileCopy to Clipboard Copied! Toggle word wrap Toggle overflow
13.11. Adjusting Virtual Memory (VM) Tunables Copy linkLink copied to clipboard!
Virtual Memory (VM) tunables are kernel parameters that control how the system manages memory, including how aggressively it uses swap space. Adjusting these settings can significantly impact system performance based on the workload.
The vm.swappiness parameter controls the kernel’s tendency to move processes out of physical memory and into swap space. The value is a percentage, ranging from 0 to 100:
- Higher Value (e.g., 60 or 100): The kernel will swap processes to disk more aggressively. This can free up physical memory for other uses (like the file system cache), but it may increase I/O operations and latency if swapped processes are frequently needed.
- Lower Value (e.g., 0 or 10): The kernel will try to avoid swapping and keep processes in physical memory for as long as possible. This is generally preferred for desktop systems or servers with fast I/O and large amounts of RAM.
Following other relevant VM tunables can influence swap behavior:
- vm.dirty_ratio: The percentage of system memory that can be filled with "dirty" pages (memory pages that have been modified but not yet written to disk) before the kernel begins actively writing them out.
-
vm.dirty_background_ratio: The percentage of system memory that can be filled with dirty pages before a background kernel process begins writing them out. This is a less aggressive action than
vm.dirty_ratio.
Procedure
View the current value:
cat /proc/sys/vm/swappiness
$ cat /proc/sys/vm/swappinessCopy to Clipboard Copied! Toggle word wrap Toggle overflow The default value is 60.
Set the value temporarily, for example, to 10:
sysctl vm.swappiness=10
# sysctl vm.swappiness=10Copy to Clipboard Copied! Toggle word wrap Toggle overflow Set the value permanently to persist across reboots by editing the
/etc/sysctl.d/99-sysctl.confor a similar configuration file:vm.swappiness = 10
vm.swappiness = 10Copy to Clipboard Copied! Toggle word wrap Toggle overflow Apply the changes:
sysctl -p
# sysctl -pCopy to Clipboard Copied! Toggle word wrap Toggle overflow