Virtual memory parameters
The virtual memory parameters are listed in the /proc/sys/vm directory.
The following are the available virtual memory parameters:
-
vm.dirty_ratio - A percentage value. When this percentage of total system memory is modified, the system begins writing the modifications to the disk. The default value is 20 percent.
-
vm.dirty_background_ratio - A percentage value. When this percentage of total system memory is modified, the system begins writing the modifications to the disk in the background. The default value is 10 percent.
-
vm.overcommit_memory - Defines the conditions that determine whether a large memory request is accepted or denied. The default value is 0. The kernel grants memory requests based on total available RAM and swap, rejecting only large allocations. Otherwise, virtual memory allocations are granted, and can allow memory overcommitment.
- Setting the
overcommit_memoryparameter’s value -
- When set to 1, the kernel performs no memory overcommit handling. This increases the possibility of memory overload, but improves performance for memory-intensive tasks.
- When set to 2, the kernel denies allocations exceeding the total swap plus the RAM percentage defined in
overcommit_ratio. This setting reduces the risk of overcommitting memory. Use this only for systems with the swap partition larger than physical memory.
-
vm.overcommit_ratio - Specifies the percentage of physical RAM considered when
overcommit_memoryis set to 2. The default value is 50. -
vm.max_map_count - Defines the maximum number of memory map areas that a process can use. The default value is 65530. Increase this value if your application needs more memory map areas.
-
vm.min_free_kbytes - Sets the size of the reserved free pages pool. It is also responsible for setting the
min_page,low_page, andhigh_pagethresholds. These thresholds govern the behavior of the page reclaim algorithms in the Linux kernel. It also specifies to keep the minimum number of free kilobytes across the system. This calculates a specific value for each low memory zone. Each zone is assigned a number of reserved free pages in proportion to its size. - Setting the
vm.min_free_kbytesparameter’s value -
- Increasing the parameter value effectively reduces the application working set usable memory. Therefore, you can use it for only kernel-driven workloads, where driver buffers need to be allocated in atomic contexts.
- Decreasing the parameter value might render the kernel unable to service system requests if memory becomes heavily contended in the system.
Warning Extreme values can be detrimental to the system’s performance. Setting thevm.min_free_kbytesto an extremely low value prevents the system from reclaiming memory effectively. This can result in system crashes and failure to service interrupts or other kernel services. However, settingvm.min_free_kbytestoo high considerably increases system reclaim activity, causing allocation latency due to a false direct reclaim state. This might cause the system to immediately enter an out-of-memory state. Thevm.min_free_kbytesparameter also sets a page reclaim watermark, calledmin_pages. This watermark is used as a factor when determining the two other memory watermarks,low_pages, andhigh_pages, that govern page reclaim algorithms. /proc/PID/oom_adjIn the event, when a system runs out of memory and thepanic_on_oomparameter is set to 0, theoom_killerfunction kills processes, starting with the process that has the highestoom_score, until the system recovers. Theoom_adjparameter determines theoom_scoreof a process. This parameter is set per process identifier. A value of -17 disables theoom_killerfor that process. Other valid values range from -16 to 15.Note Processes created by an adjusted process inherit theoom_scoreof that process.
-
vm.swappiness - The swappiness value, ranging from 0 to 200, controls whether the system prioritizes reclaiming memory from anonymous pages or the page cache.
- Setting the swappiness parameter’s value
-
- Higher values prefer file-mapped driven workloads while swapping out the less actively accessed processes’ anonymous mapped memory of RAM. File servers and streaming applications use this to keep data in memory, reducing I/O latency.
- Low values prefer anonymous-mapped driven workloads while reclaiming the page cache (file mapped memory). This setting is useful for applications that do not depend heavily on file system information and use dynamically allocated private memory. Examples include mathematical and number-crunching applications and some hardware virtualization supervisors such as QEMU. The default value of the
vm.swappinessparameter is 60.Warning Setting thevm.swappinessto 0 aggressively avoids swapping out anonymous memory to a disk. This increases the likelihood that theoom_killerfunction kills processes during memory or I/O-intensive workloads.