funwithlinux guide

Reducing SWAP Usage for Better Linux Performance

Ever noticed your Linux system slowing to a crawl, with the hard drive or SSD churning nonstop? That telltale "grinding" sound (or a spike in disk activity on an SSD) often points to one culprit: excessive **SWAP usage**. SWAP, or virtual memory, is a critical part of Linux systems, but when overused, it can turn a snappy machine into a frustratingly slow one. In this blog, we’ll demystify SWAP, explain why high SWAP usage hurts performance, and walk through actionable steps to reduce it. Whether you’re a casual user or a system administrator, these tips will help you optimize your Linux system for speed and responsiveness.

Table of Contents

  1. Understanding SWAP and Its Role in Linux
  2. Why High SWAP Usage Hurts Performance
  3. How to Monitor SWAP Usage
  4. Strategies to Reduce SWAP Usage
  5. Advanced Tweaks: Tuning SWAP Behavior with vm.swappiness
  6. When to Keep or Even Increase SWAP
  7. Conclusion
  8. References

1. Understanding SWAP and Its Role in Linux

SWAP (or swap space) is a portion of your hard drive or SSD allocated to act as “virtual memory.” When your system’s physical RAM (Random Access Memory) runs low, inactive data from RAM is moved to SWAP to free up space for active processes.

Key Points About SWAP:

  • Purpose: Prevents crashes due to “out-of-memory” (OOM) errors by extending available memory.
  • Types:
    • Swap Partition: A dedicated disk partition (traditional, faster for HDDs).
    • Swap File: A regular file on the filesystem (easier to resize, common on modern Linux).
  • Hibernation: Critical for systems using hibernation (SWAP must be at least as large as RAM to store the memory state).

2. Why High SWAP Usage Hurts Performance

While SWAP is a lifesaver, relying on it heavily degrades performance. Here’s why:

1. Speed Gap: RAM vs. Storage

RAM is orders of magnitude faster than even the fastest SSDs:

  • DDR4 RAM: ~20-50 GB/s
  • NVMe SSD: ~3-7 GB/s
  • SATA SSD: ~500 MB/s
  • HDD: ~100 MB/s

Accessing data in SWAP is drastically slower than RAM, leading to laggy applications and unresponsive systems.

2. Thrashing

When the system swaps data in and out of SWAP constantly (called “thrashing”), the CPU spends more time waiting for disk I/O than processing tasks. This brings the system to a near-halt.

3. Increased Wear (SSDs)

Frequent swapping shortens SSD lifespan, as SSDs have limited write cycles.

3. How to Monitor SWAP Usage

Before fixing SWAP issues, you need to measure usage. Here are the best tools:

1. free Command

Shows total, used, free, and cached SWAP:

free -h  

Output Example:

              total        used        free      shared  buff/cache   available  
Mem:           15Gi       8.2Gi       1.3Gi       1.5Gi       6.0Gi       5.5Gi  
Swap:          19Gi       12Gi        7.0Gi  
  • Swap: used: 12GB of SWAP is in use (high—indicates potential issues).

2. swapon Command

Lists active swap devices/files and their usage:

swapon --show  

Output Example:

NAME      TYPE      SIZE   USED PRIO  
/swapfile file       19G  12.3G   -2  

3. htop (Interactive Process Viewer)

A visual tool showing SWAP usage per process. Install with sudo apt install htop (Debian/Ubuntu) or sudo dnf install htop (Fedora).

  • Look for the SWAP column in the process list to identify memory hogs.

4. vmstat (System Activity Monitor)

Shows real-time swap activity (si = swap in, so = swap out):

vmstat 5  # Refresh every 5 seconds  

Output Example:

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----  
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st  
 1  0 12684880 1365240 123456 6234560   15   20   120   250  123  456 20  5 70  5  0  
  • si/so > 0: System is actively swapping (high values = thrashing).

4. Strategies to Reduce SWAP Usage

4.1 Add More Physical RAM (Most Effective)

The best long-term fix for excessive SWAP usage is upgrading RAM. If your system frequently uses >50% of RAM, adding more RAM will eliminate the need for SWAP in most cases.

4.2 Close Unnecessary Applications and Services

  • Manual Cleanup: Close unused apps (e.g., browser tabs, background tools).
  • Identify Hogs: Use htop to find processes with high RES (resident memory) or SWAP usage. Kill them with kill -9 <PID>.

4.3 Identify and Fix Memory Leaks

A memory leak occurs when an app uses increasing RAM without releasing it. Symptoms: RAM usage grows over time until SWAP is needed.

  • Check for Leaks: Use ps aux --sort=-%mem to track memory usage of apps over hours.
  • Fixes: Update the app (developers often patch leaks), or switch to an alternative.

4.4 Optimize Startup Applications

Many apps launch automatically at boot, wasting RAM. Disable unnecessary ones:

  • GUI Method: Use “Startup Applications” (GNOME) or “Session and Startup” (Xfce).
  • CLI Method (Systemd): List enabled services with systemctl list-unit-files --type=service --state=enabled, then disable non-essentials:
    sudo systemctl disable bluetooth.service  # Example: Disable Bluetooth if unused  

4.5 Use Lighter Alternatives to Memory-Heavy Tools

Heavy ToolLighter AlternativeRAM Savings Example
Google ChromeFirefox, Midori, or Brave30-50% less memory
GNOME/KDE (DE)Xfce, LXQt, or i3 (WM)1-2GB less RAM at idle
LibreOfficeAbiWord, Gnumeric200-300MB per document
DockerPodman (lighter container runtime)~100MB less overhead

5. Advanced Tweaks: Tuning SWAP Behavior with vm.swappiness

Linux uses a kernel parameter called vm.swappiness to control how aggressively it swaps data to disk.

What is vm.swappiness?

  • A value between 0 (minimal swapping) and 100 (aggressive swapping).
  • Default: Typically 60 (balances RAM and SWAP usage).

How to Adjust vm.swappiness:

Step 1: Check Current Value

sysctl vm.swappiness  

Output: vm.swappiness = 60

Step 2: Temporary Change (Until Reboot)

For desktops (prioritize RAM):

sudo sysctl -w vm.swappiness=10  
  • 10-20: Swaps only when RAM is nearly full (ideal for most users).
  • 0: Swaps only when RAM is completely full (risky—may cause OOM crashes).

Step 3: Permanent Change

Edit /etc/sysctl.conf (or create /etc/sysctl.d/99-swappiness.conf):

sudo nano /etc/sysctl.d/99-swappiness.conf  

Add:

vm.swappiness=10  

Reboot or apply with:

sudo sysctl --system  

Bonus: vm.vfs_cache_pressure

Controls how aggressively the kernel reclaims memory from filesystem caches (e.g., dentries, inodes). Lower values keep caches longer, reducing SWAP:

vm.vfs_cache_pressure=50  # Default is 100; 50 = keep caches longer  

6. When to Keep or Even Increase SWAP

Not all SWAP usage is bad. Keep SWAP (or expand it) if:

  • Hibernation: You use hibernation (SWAP size ≥ RAM).
  • Low RAM Systems: <4GB RAM—SWAP prevents crashes when RAM fills up.
  • Spikey Workloads: Apps that occasionally use more RAM than available (e.g., video editors).

How to Add More SWAP:
Create a swap file (easy resizing):

sudo fallocate -l 10G /swapfile  # Create 10GB file  
sudo chmod 600 /swapfile  
sudo mkswap /swapfile  
sudo swapon /swapfile  
# Make permanent: Add to /etc/fstab  
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab  

7. Conclusion

Excessive SWAP usage slows Linux systems, but it’s fixable. Start by monitoring with free, htop, or vmstat to identify issues. Prioritize adding RAM, closing unused apps, and optimizing startup services. For advanced users, tuning vm.swappiness can reduce unnecessary swapping.

Remember: SWAP is a safety net, not a replacement for RAM. Use these tips to strike a balance, and your Linux system will run faster and smoother.

8. References