proc_meminfo(5)
โจ proc_meminfo(5) โ the file is /proc/meminfo โจ
okay bestie, gather round ๐ this is the manual page for proc_meminfo(5), and it's literally just about one absolute icon of a file: /proc/meminfo. no cap.
โจ NAME โจ
/proc/meminfo โ memory usage ๐ง ๐ซ
๐ธ DESCRIPTION ๐ธ
the vibe
/proc/meminfo is the file that spills all the tea about memory usage on your system. it's the one free(1) reads so it can tell you how much memory is free and how much is used (both physical and swap), plus the shared memory and buffers the kernel is holding onto. main character behaviour, honestly.
every line in this file is built like:
- a parameter name
- a colon
- the value of the parameter
- an optional unit of measurement (think
"kB")
the list below tells you all the parameter names, and the format specifier you need to read each field's value. unless it says otherwise, every single one of these fields has been around since at least Linux 2.6.0. some fields only show up if your kernel was built with certain options, and those dependencies are called out right there in the list, iykyk ๐ซถ
๐ the fields ๐
MemTotal%luโ total usable RAM. that's physical RAM minus a few reserved bits and minus the kernel binary code. yes, the kernel takes its cut first ๐MemFree%luโ the sum ofLowFree+HighFree. that's it, that's the whole recipe โจMemAvailable%lu(since Linux 3.14) โ an estimate of how much memory is actually available for starting new applications, without needing to swap. the "can i open another browser tab" number fr frBuffers%luโ relatively temporary storage for raw disk blocks. it shouldn't get tremendously large (like 20 MB or so). lowkey humble of it.Cached%luโ in-memory cache for files read from the disk (aka the page cache). note: it does not includeSwapCached.SwapCached%luโ memory that once was swapped out, is swapped back in, but still also lives in the swap file. (if memory pressure is high, these pages don't need to be swapped out again, because they're already sitting in the swap file. this saves I/O. queen behaviour ๐ )Active%luโ memory that's been used more recently, and usually isn't reclaimed unless it is absolutely necessary.Inactive%luโ memory that's been used less recently. it's more eligible to be reclaimed for other purposes. sorry bestie, you're on the bench ๐ญActive(anon)%lu(since Linux 2.6.28) โ[To be documented.]Inactive(anon)%lu(since Linux 2.6.28) โ[To be documented.]Active(file)%lu(since Linux 2.6.28) โ[To be documented.]Inactive(file)%lu(since Linux 2.6.28) โ[To be documented.]Unevictable%lu(since Linux 2.6.28) โ (from Linux 2.6.28 to Linux 2.6.30,CONFIG_UNEVICTABLE_LRUwas required.)[To be documented.]Mlocked%lu(since Linux 2.6.28) โ (from Linux 2.6.28 to Linux 2.6.30,CONFIG_UNEVICTABLE_LRUwas required.)[To be documented.]HighTotal%luโ (starting with Linux 2.6.19,CONFIG_HIGHMEMis required.) total amount of highmem. highmem is all memory above roughly 860 MB of physical memory. highmem areas are for user-space programs to use, or for the page cache. the kernel has to use tricks to reach this memory, which makes it slower to access than lowmem. not the kernel doing parkour ๐HighFree%luโ (starting with Linux 2.6.19,CONFIG_HIGHMEMis required.) amount of free highmem.LowTotal%luโ (starting with Linux 2.6.19,CONFIG_HIGHMEMis required.) total amount of lowmem. lowmem is memory that can do everything highmem can do, plus it's available for the kernel to use for its own data structures. among many other things, it's where everything fromSlabgets allocated. bad things happen when you're out of lowmem ๐ญ so don't do that.LowFree%luโ (starting with Linux 2.6.19,CONFIG_HIGHMEMis required.) amount of free lowmem.MmapCopy%lu(since Linux 2.6.29) โ (CONFIG_MMUis required.)[To be documented.]SwapTotal%luโ total amount of swap space available. ๐พSwapFree%luโ amount of swap space that is currently unused.Dirty%luโ memory that is waiting to get written back to the disk. it's giving "i'll do it in a sec" ๐Writeback%luโ memory that is actively being written back to the disk. clocked in and working fr.AnonPages%lu(since Linux 2.6.18) โ non-file backed pages mapped into user-space page tables.Mapped%luโ files that have been mapped into memory withmmap(2)โ libraries and friends. hi bestie ๐ธShmem%lu(since Linux 2.6.32) โ amount of memory consumed intmpfs(5)filesystems, System V, and POSIX shared memory, plus shared anonymous mappings (MAP_SHARED|MAP_ANONYMOUS).KReclaimable%lu(since Linux 4.20) โ kernel allocations that the kernel will attempt to reclaim under memory pressure. includesSReclaimable(below), and other direct allocations with a shrinker.Slab%luโ in-kernel data structures cache. (seeslabinfo(5).)SReclaimable%lu(since Linux 2.6.19) โ part ofSlabthat might be reclaimed, like caches. reclaimable queen โจSUnreclaim%lu(since Linux 2.6.19) โ part ofSlabthat cannot be reclaimed on memory pressure. immovable icon, brick wall energy ๐งฑKernelStack%lu(since Linux 2.6.32) โ amount of memory allocated to kernel stacks.PageTables%lu(since Linux 2.6.18) โ amount of memory dedicated to the lowest level of page tables.Quicklists%lu(since Linux 2.6.27) โ (CONFIG_QUICKLISTis required.)[To be documented.]NFS_Unstable%lu(since Linux 2.6.18) โ NFS pages sent to the server, but not yet committed to stable storage. they're in transit bestie ๐ฆBounce%lu(since Linux 2.6.18) โ memory used for block device "bounce buffers".WritebackTmp%lu(since Linux 2.6.26) โ memory used by FUSE for temporary writeback buffers.CommitLimit%lu(since Linux 2.6.10) โ 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 (that's 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 fileDocumentation/vm/overcommit-accounting.rst.
not me dropping a whole kernel doc path in here, but there it is ๐
Committed_AS%luโ the amount of memory presently allocated on the system. committed memory is the sum of all memory that has been allocated by processes, even if it hasn't been "used" by them as of yet. a process that allocates 1 GB of memory (usingmalloc(3)or similar) but only touches 300 MB of it will show up as using only 300 MB of memory, even though it has the address space allocated for the entire 1 GB.
that 1 GB is memory that's been "committed" to by the VM, and it 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 that would exceed the CommitLimit will not be permitted. this is useful if you need to guarantee that processes won't fail due to lack of memory once that memory has been successfully allocated. โจ
VmallocTotal%luโ total size of the vmalloc memory area.VmallocUsed%luโ amount of vmalloc area which is used. since Linux 4.4, this field is no longer calculated, and is hard coded as0. see/proc/vmallocinfo.VmallocChunk%luโ largest contiguous block of vmalloc area which is free. since Linux 4.4, this field is no longer calculated and is hard coded as0. see/proc/vmallocinfo.HardwareCorrupted%lu(since Linux 2.6.32) โ (CONFIG_MEMORY_FAILUREis required.)[To be documented.]LazyFree%lu(since Linux 4.12) โ shows the amount of memory marked bymadvise(2)MADV_FREE.AnonHugePages%lu(since Linux 2.6.38) โ (CONFIG_TRANSPARENT_HUGEPAGEis required.) non-file backed huge pages mapped into user-space page tables. big pages, big energy ๐ShmemHugePages%lu(since Linux 4.8) โ (CONFIG_TRANSPARENT_HUGEPAGEis required.) memory used by shared memory (shmem) andtmpfs(5)allocated with huge pages.ShmemPmdMapped%lu(since Linux 4.8) โ (CONFIG_TRANSPARENT_HUGEPAGEis required.) shared memory mapped into user space with huge pages.CmaTotal%lu(since Linux 3.1) โ total CMA (Contiguous Memory Allocator) pages. (CONFIG_CMAis required.)CmaFree%lu(since Linux 3.1) โ free CMA (Contiguous Memory Allocator) pages. (CONFIG_CMAis required.)HugePages_Total%luโ (CONFIG_HUGETLB_PAGEis required.) the size of the pool of huge pages. ๐ซถHugePages_Free%luโ (CONFIG_HUGETLB_PAGEis required.) the number of huge pages in the pool that are not yet allocated.HugePages_Rsvd%lu(since Linux 2.6.17) โ (CONFIG_HUGETLB_PAGEis required.) 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. reserved and ready ๐HugePages_Surp%lu(since Linux 2.6.24) โ (CONFIG_HUGETLB_PAGEis required.) 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.Hugepagesize%luโ (CONFIG_HUGETLB_PAGEis required.) the size of huge pages.
DirectMap4k %luโ (since Linux 2.6.27) ๐ฅ how many bytes of RAM the kernel has linearly mapped into 4 kB pages. Tiny pages, big energy. (x86.)DirectMap4M %luโ (since Linux 2.6.27) โจ the byte count of RAM the kernel linearly mapped using 4 MB pages. This one's for x86 whenCONFIG_X86_64orCONFIG_X86_PAEis enabled, iykyk ๐DirectMap2M %luโ (since Linux 2.6.27) ๐ฆ bytes of RAM linearly mapped by the kernel in 2 MB pages. Plot twist: it's x86 with neitherCONFIG_X86_64norCONFIG_X86_PAEenabled. not me picking the opposite config ๐ญDirectMap1G %luโ (since Linux 2.6.27) ๐ okay so the manpage keeps this one genuinely mysterious โ no description, no explanation, just the vibe, literally all it tells you is the condition: it's x86 withCONFIG_X86_64andCONFIG_X86_DIRECT_GBPAGESenabled. that's the whole entry. periodt ๐
and that's a wrap on the fields, bestie ๐ you made it through the whole list, main character behaviour fr fr ๐
๐ SEE ALSO ๐
proc(5)โ the mothership ๐ go read it, it's iconic.
aww you actually read the whole /proc/meminfo page, I'm obsessed ๐ซถ catch you in the next manpage โ this lil tour was Linux man-pages 6.20, dated 2026-02-08 (yep, she's fresh ๐), and that's a โจ signed, sealed, slayed โจ edition. byeeee ๐๐ง๐
๐ฆ where this page comes from
- arch rolling: man-pages 6.20-1 ยท BSD-2-Clause AND BSD-3-Clause AND BSD-4.3TAHOE AND BSD-4-Clause-UC AND GPL-1.0-or-later AND GPL-2.0-only AND GPL-2.0-or-later AND GPL-3.0-or-later AND LGPL-3.0-linking-exception AND LGPL-3.0-or-later AND LicenseRef-Public-Domain AND LicenseRef-UltraPermissive AND Linux-man-pages-1-para AND Linux-man-pages-copyleft AND Linux-man-pages-copyleft-2-para AND Linux-man-pages-copyleft-var AND MIT AND Spencer-94
- nixpkgs unstable: man-pages 6.20
- ๐ the page's license: GPL-3.0-or-later
- Copyright 1994-1995, Daniel Quinlan <Daniel.Quinlan@linux.org>
- Copyright 2002-2017, Michael Kerrisk <mtk.manpages@gmail.com>
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms