Understanding Linux Memory Management: Allocation, OOM, and Cache
This article explains Linux kernel memory management, covering process address space layout, memory allocation methods, OOM killer behavior, where different types of memory reside, and both manual and automatic memory reclamation techniques, illustrated with diagrams and command examples.
Preface: Inspired by an OOM talk, the author shares a detailed overview of Linux kernel memory management.
1. Process Memory Allocation
When a program starts,
execloads the executable and maps the code, data, BSS, and stack segments via
mmap. The heap is created on the first
malloccall, using
brkor an anonymous
mmap. The kernel builds VMA structures and the memory allocator (ptmalloc, tcmalloc, jemalloc) returns the requested memory; large allocations use direct
mmap. Freeing memory either calls
munmapfor
mmapregions or returns pages to the allocator.
2. Out‑of‑Memory (OOM) Handling
When memory is exhausted, the OOM killer selects a victim based on factors such as memory usage, runtime, priority, user, child count and
oom_adj. Each process receives an
oom_score; the highest score is killed. Adjusting
/proc/<pid>/oom_adjcan protect a process (e.g., setting -17 makes it immune). The kernel parameter
/proc/sys/vm/overcommit_memorycontrols over‑commit behavior: 0 = heuristic, 1 = always allow, 2 = strict limit.
3. Where Allocated Memory Resides
Memory can be in page cache or ordinary RAM. File‑backed mappings (code, data, shared libraries) are cached; shared file mappings increase
buff/cache. Private file mappings use copy‑on‑write, also increasing cache. Anonymous private mappings allocate pages directly in RAM without using cache. Shared anonymous mappings use the cache so that parent and child share the same physical pages.
4. Memory Reclamation
Manual reclamation can be triggered with
echo 1 > /proc/sys/vm/drop_caches, which frees page cache, dentries, and inodes. The kernel’s
kswapdthread periodically scans LRU lists, evicts inactive pages, and may swap out anonymous pages. Parameters such as
vm.swappinesscontrol the preference for swapping versus cache reclamation.
Typical commands:
echo 1 >> /proc/sys/vm/drop_caches
The kernel also uses
tmpfsfor shared memory, POSIX shared memory, and other IPC mechanisms; pages belonging to
tmpfsare not reclaimable by
drop_cachesbecause they are referenced by files.
5. Summary
The article reviews the process address space, explains how Linux allocates and frees memory, describes OOM selection, shows where different kinds of mappings are stored, and outlines both manual and automatic memory reclamation mechanisms.
Efficient Ops
This public account is maintained by Xiaotianguo and friends, regularly publishing widely-read original technical articles. We focus on operations transformation and accompany you throughout your operations career, growing together happily.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.