How to Manage Swap Usage in Linux

How to Manage Swap Usage in Linux

You may have experienced system lags, heavy swap usage, or low memory issues in your Linux system. A usual advice is to “decrease the swappiness value”, reduce the swap usage. but what is swappiness? And is it really good to tweak it?

Note: we won’t go into detail about the swap partition. You can read all about it in our article on what you need to know about Swap partition on Linux.

There is a value called swappiness in UNIX-like systems that determines how pages in memory will be handled. Its default value on most systems is “60,” but it can be set to anything between 0 and 100. If memory runs low, the kernel will either evict some file caches to have more free RAM for processes, or it will swap some process pages from RAM to disk.

A default of 60 means swapping will be used less, and I/O caches will more likely be freed for reallocating RAM. Evicting caches is considered “cheaper” (less resource intensive), while swapping out pages includes disk reads and writes, making them more “expensive.” At a value of ’60,’ swap usage will be slightly lower than cache reuse. If the value of swappiness is increased to 100, swapping and file cache eviction will be used with equal weight. This means more swapping and faster I/O than default. Lower values like “10” mean that swapping will be used much less, and I/O caches can be much sooner evicted in favor of processes. This might increase interactivity but could also hurt I/O speed.

You will often see the advice on websites and forums to reduce swappiness to around “10.” This is supposed to speed things up by using less swap and keeping more processes in physical RAM. This logic might be somewhat too straightforward and might not be a “one size fits all solution.”

Decreasing the value of swappiness might be good in the following scenarios:

  • For databases systems, or if you use a lot of database intensive applications: Databases generally handle file caching way better than the OS would. If you reduce swappiness, you will limit the OS’s file caching, thus giving a chance to the database to handle its own caches.
  • For interactivity: If you multitask a lot but handle few files or don’t open large documents, this could improve how smooth your system will feel. Less processes will be written out to disk, and as RAM access is much faster, your computer can feel faster. You must also bear in mind that this can reduce I/O performance. If you have slow disks or do anything I/O intensive, it might even hurt performance.
  • For placebo: Many believe that a lower swappiness will speed up the system,. Seriously, f you think that your system is faster, it might have the effect of perceiving it to be faster, too.

Keep in mind that decreasing swappiness might result in crashes and processes being randomly killed by the system in order to free up memory. Decreasing swappiness will be best if you have enough RAM available to run your system smoothly. But you should keep the value above “10”, as some swap use is good to have.

Increasing swappiness can have the general advantage of speeding up I/O. Although not often advised, increasing swappiness might come in handy if:

  • You perform some I/O intensive operations, and you have slow, old HDDs. For example: performing backups or batch editing images can be I/O intensive (A notable exception is databases which are naturally I/O intensive but could benefit from a lower swappiness value as seen above.).
  • You have low memory but have relatively fast disks. In this unlikely scenario, a higher value of swappiness might help to handle memory more efficiently (although setting it too high might again hurt performance.).

First, you should consider if you need to touch this value at all. Are you experiencing performance issues? And more importantly, have you tried other system tweaks yet? If not, it is probably best to look elsewhere first. But if you have a specific scenario in mind, you might want to continue.

Next, how heavy is your swap usage? You can find it out with any performance monitoring tool of your choice or with the free command. free -m will give you a snapshot of the memory usage in megabytes. For continuous monitoring, you might want to use watch.

This will run the free -m command every second and print its output until you press “Ctrl + C.”

swappiness-free-m

As you see above, very little swap is being used by the system this article is written on.

Now if you do experience swapping, you might be interested how much of it is active. The command vmstat will tell you all you need to know about your system’s virtual memory usage (swap and physical ram together).

swappiness-vmstat

You need to check the swap column where si means “swap in”, and so means “swap out.” If the numbers are high, it means a lot of swapping activity which is an indicator of low memory issues. If you see swap usage by free but little active swapping, tweaking swappiness might be due.

It is also a good idea to establish other performance benchmarks like disk I/O, load averages, etc., so when you test your new swappiness values, you have something to compare against.

To test a different swappiness value, you can set it temporarily with the sysctl command. This needs no rebooting, and the effect is immediate. In fact, rebooting will restore the default value, so you are quite safe to experiment:

Of course, you can put any value instead of “10” (between “0” and “100”).

Once you’ve found your preferred value, you can permanently change the system configuration by editing “/etc/sysctl.conf”

and adding the lines

to the end of this file, with the value set to your preference once again, of course.

Lowering swappiness to “10” is often advised as a one-size-fits-all solution, but the actual use of the technique might be a tiny bit more complicated than that. By establishing benchmarks, knowing your system, how you use it, and what you need from it, you can fine tune your swap usage and achieve some performance (either interactivity or I/O) increase.

4 comments

  1. i like linux but some time i get rwong ting for command
    jus wanna know more about it and i will be happy to
    dill this poeple

  2. The concept of swapping data in and out of memory has become arcane.

    It made sense when you had 640 kB RAM (remember that olde “IBM-PC” ?) And needed to interact with files larger than your RAM memory could hold. But nowadays ? Bottom bargain laptops come equipped with 4 GB of RAM, even my cellphone has 8 GB. What could possibly require more ?

    I removed my swap partition in 2009 and hadn’t had a kernel panic yet. The only drawback is, that during upgrades the installer program whines about: “Are you sure you do NOT want to create a SWAP partition ?”. Just click !

  3. ORACLE DATABASE 11G SWAP REQUIREMENTS

    2.2.1 Memory Requirements
    The following are the memory requirements for installing Oracle Database 11g Release 1:

    At least 1 GB of RAM

    To determine the RAM size, enter the following command:

    # grep MemTotal /proc/meminfo
    If the size of the RAM is less than the required size, then you must install more memory before continuing.

    The following table describes the relationship between installed RAM and the configured swap space requirement:

    Note:
    On Linux, the Hugepages feature allocates non-swappable memory for large page tables using memory-mapped files. If you enable Hugepages, then you should deduct the memory allocated to Hugepages from the available RAM before calculating swap space.
    RAM Swap Space
    Between 1 GB and 2 GB 1.5 times the size of RAM
    Between 2 GB and 16 GB Equal to the size of RAM
    More than 16 GB 16 GB
    To determine the size of the configured swap space, enter the following command:

    # grep SwapTotal /proc/meminfo
    If necessary, refer to the operating system documentation for information about how to configure additional swap space.

Comments are closed.

Sponsored Stories