proc_meminfo(5) File Formats Manual proc_meminfo(5)

/proc/meminfo - memory usage

/proc/meminfo
This file reports statistics about memory usage on the system. It is used by free(1) to report the amount of free and used memory (both physical and swap) on the system as well as the shared memory and buffers used by the kernel. Each line of the file consists of a parameter name, followed by a colon, the value of the parameter, and an option unit of measurement (e.g., "kB"). The list below describes the parameter names and the format specifier required to read the field value. Except as noted below, all of the fields have been present since at least Linux 2.6.0. Some fields are displayed only if the kernel was configured with various options; those dependencies are noted in the list.
Total usable RAM (i.e., physical RAM minus a few reserved bits and the kernel binary code).
The sum of LowFree+HighFree.
An estimate of how much memory is available for starting new applications, without swapping.
Relatively temporary storage for raw disk blocks that shouldn't get tremendously large (20 MB or so).
In-memory cache for files read from the disk (the page cache). Doesn't include SwapCached.
Memory that once was swapped out, is swapped back in but still also is in the swap file. (If memory pressure is high, these pages don't need to be swapped out again because they are already in the swap file. This saves I/O.)
Memory that has been used more recently and usually not reclaimed unless absolutely necessary.
Memory which has been less recently used. It is more eligible to be reclaimed for other purposes.
[To be documented.]
[To be documented.]
[To be documented.]
[To be documented.]
(From Linux 2.6.28 to Linux 2.6.30, CONFIG_UNEVICTABLE_LRU was required.) [To be documented.]
(From Linux 2.6.28 to Linux 2.6.30, CONFIG_UNEVICTABLE_LRU was required.) [To be documented.]
(Starting with Linux 2.6.19, CONFIG_HIGHMEM is required.) Total amount of highmem. Highmem is all memory above ~860 MB of physical memory. Highmem areas are for use by user-space programs, or for the page cache. The kernel must use tricks to access this memory, making it slower to access than lowmem.
(Starting with Linux 2.6.19, CONFIG_HIGHMEM is required.) Amount of free highmem.
(Starting with Linux 2.6.19, CONFIG_HIGHMEM is required.) Total amount of lowmem. Lowmem is memory which can be used for everything that highmem can be used for, but it is also available for the kernel's use for its own data structures. Among many other things, it is where everything from Slab is allocated. Bad things happen when you're out of lowmem.
(Starting with Linux 2.6.19, CONFIG_HIGHMEM is required.) Amount of free lowmem.
(CONFIG_MMU is required.) [To be documented.]
Total amount of swap space available.
Amount of swap space that is currently unused.
Memory which is waiting to get written back to the disk.
Memory which is actively being written back to the disk.
Non-file backed pages mapped into user-space page tables.
Files which have been mapped into memory (with mmap(2)), such as libraries.
Amount of memory consumed in tmpfs(5) filesystems.
Kernel allocations that the kernel will attempt to reclaim under memory pressure. Includes SReclaimable (below), and other direct allocations with a shrinker.
In-kernel data structures cache. (See slabinfo(5).)
Part of Slab, that might be reclaimed, such as caches.
Part of Slab, that cannot be reclaimed on memory pressure.
Amount of memory allocated to kernel stacks.
Amount of memory dedicated to the lowest level of page tables.
(CONFIG_QUICKLIST is required.) [To be documented.]
NFS pages sent to the server, but not yet committed to stable storage.
Memory used for block device "bounce buffers".
Memory used by FUSE for temporary writeback buffers.
This is the total amount of memory currently available to be allocated on the system, expressed in kilobytes. This limit is adhered to only if strict overcommit accounting is enabled (mode 2 in /proc/sys/vm/overcommit_memory). The limit is calculated according to the formula described under /proc/sys/vm/overcommit_memory. For further details, see the kernel source file Documentation/vm/overcommit-accounting.rst.
The amount of memory presently allocated on the system. The committed memory is a sum of all of the memory which has been allocated by processes, even if it has not been "used" by them as of yet. A process which allocates 1 GB of memory (using malloc(3) or similar), but touches only 300 MB of that memory will show up as using only 300 MB of memory even if it has the address space allocated for the entire 1 GB.
This 1 GB is memory which has been "committed" to by the VM and can be used at any time by the allocating application. With strict overcommit enabled on the system (mode 2 in /proc/sys/vm/overcommit_memory), allocations which would exceed the CommitLimit will not be permitted. This is useful if one needs to guarantee that processes will not fail due to lack of memory once that memory has been successfully allocated.
Total size of vmalloc memory area.
Amount of vmalloc area which is used. Since Linux 4.4, this field is no longer calculated, and is hard coded as 0. See /proc/vmallocinfo.
Largest contiguous block of vmalloc area which is free. Since Linux 4.4, this field is no longer calculated and is hard coded as 0. See /proc/vmallocinfo.
(CONFIG_MEMORY_FAILURE is required.) [To be documented.]
Shows the amount of memory marked by madvise(2) MADV_FREE.
(CONFIG_TRANSPARENT_HUGEPAGE is required.) Non-file backed huge pages mapped into user-space page tables.
(CONFIG_TRANSPARENT_HUGEPAGE is required.) Memory used by shared memory (shmem) and tmpfs(5) allocated with huge pages.
(CONFIG_TRANSPARENT_HUGEPAGE is required.) Shared memory mapped into user space with huge pages.
Total CMA (Contiguous Memory Allocator) pages. (CONFIG_CMA is required.)
Free CMA (Contiguous Memory Allocator) pages. (CONFIG_CMA is required.)
(CONFIG_HUGETLB_PAGE is required.) The size of the pool of huge pages.
(CONFIG_HUGETLB_PAGE is required.) The number of huge pages in the pool that are not yet allocated.
(CONFIG_HUGETLB_PAGE is required.) This is the number of huge pages for which a commitment to allocate from the pool has been made, but no allocation has yet been made. These reserved huge pages guarantee that an application will be able to allocate a huge page from the pool of huge pages at fault time.
(CONFIG_HUGETLB_PAGE is required.) This is the number of huge pages in the pool above the value in /proc/sys/vm/nr_hugepages. The maximum number of surplus huge pages is controlled by /proc/sys/vm/nr_overcommit_hugepages.
(CONFIG_HUGETLB_PAGE is required.) The size of huge pages.
Number of bytes of RAM linearly mapped by kernel in 4 kB pages. (x86.)
Number of bytes of RAM linearly mapped by kernel in 4 MB pages. (x86 with CONFIG_X86_64 or CONFIG_X86_PAE enabled.)
Number of bytes of RAM linearly mapped by kernel in 2 MB pages. (x86 with neither CONFIG_X86_64 nor CONFIG_X86_PAE enabled.)
(x86 with CONFIG_X86_64 and CONFIG_X86_DIRECT_GBPAGES enabled.)

proc(5)

2024-05-02 Linux man-pages 6.9.1