Linux-processen en geheugenbeheer
Linux proces- en geheugenbeheer: kernelmechanismen, tools en allocators
Dit artikel legt uit hoe het Linux-geheugenbeheersubsysteem werkt — van paginering tot allocators — en toont de commando’s waarmee u processen en geheugengebruik monitort. Gericht op systeembeheerders en DevOps-engineers die met Linux-kernels versie 5.x en 6.x werken.
Vereisten
- Een Linux-systeem met kernelversie 5.13 of hoger (voor vmalloc huge page support) of 6.12+ (voor vrealloc) - Root-toegang of sudo-rechten voor het bekijken van kernel-documentatie en het installeren van tools - `procps`-pakket (bevat `vmstat`) — standaard aanwezig op de meeste distributies - `smem`-tool installeren: `sudo apt install smem` (Debian/Ubuntu) of `sudo dnf install smem` (Fedora/RHEL)
Stappen
1. Controleer uw kernelversie
Voer uit:
uname -r
Noteer het versienummer. De geheugenbeheerfuncties verschillen per kernelversie — vrealloc bestaat bijvoorbeeld pas sinds v6.12 (2024).
2. Begrijp de basis: paginering en paginatabellen
Elk Linux-proces heeft een eigen paginatabel. Die tabel koppelt virtuele geheugenadressen aan fysieke geheugenlocaties. Het geheugen is verdeeld in gelijke blokken: virtuele “pages” worden toegewezen aan fysieke “page frames”. Dit is de kern van geheugenisolatie tussen processen — een proces kan geen geheugen van een ander proces lezen of schrijven.
Bekijk de officiële kernel-documentatie:
man 9 memory
of online: de sectie “Memory Management” in de Linux Kernel-documentatie (bijgewerkt op 24 augustus 2026) en de aparte “Memory Management Documentation”-pagina (geactualiseerd op 18 augustus 2026).
3. Bekijk actief geheugengebruik met vmstat
`vmstat` toont processen, geheugen, paging, block I/O, context switches en CPU-activiteit. Het eerste rapport toont gemiddelden sinds de laatste herstart; volgende rapporten tonen een bemonsteringsperiode.
vmstat 2 5
Dit draait 5 rapporten met 2 seconden interval. Kijk naar de kolommen `si` (swap in) en `so` (swap out) — hoge waarden duiden op geheugendruk.
4. Meet geheugengebruik per proces met smem
`smem` rapporteert geheugengebruik per proces, inclusief USS (Unique Set Size) — het geheugen dat exclusief door één proces wordt gebruikt, zonder overlap met andere processen. Dit is nauwkeuriger dan `top` of `ps` voor systemen met veel gelijktijdige processen.
smem -rs uss
De `-r` vlag sorteert, `-s uss` sorteert op USS-kolom. Installeer het pakket eerst als het ontbreekt (zie Vereisten).
5. Configureer swap-geheugen
Swap is virtueel geheugen op schijf dat wordt gebruikt wanneer RAM vol raakt. Het voorkomt een directe crash, maar is langzamer dan RAM. Bekijk de huidige swap-status:
swapon --show
Om een swapfile van 2 GB aan te maken:
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfileVoeg `/swapfile none swap sw 0 0` toe aan `/etc/fstab` om dit permanent te maken.
6. Beperk resources met cgroups
cgroups (control groups) beperken geheugen en andere resources per groep processen. Dit is essentieel in multi-user omgevingen en containers. Maak een cgroup aan met een geheugenlimiet van 512 MB:
sudo mkdir /sys/fs/cgroup/memory/mygroup
echo 536870912 | sudo tee /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytesPlaats een proces in de groep door het PID te schrijven naar de taken-file:
echo <PID> | sudo tee /sys/fs/cgroup/memory/mygroup/tasks
7. Ken de OOM-killer
De Out-of-Memory killer beëindigt automatisch een of meer processen wanneer het systeem ernstig geheugen tekort komt. Het is een laatste redmiddel om de kernel stabiel te houden. Bekijk de OOM-killer-logboek:
dmesg | grep -i "out of memory"
U kunt het OOM-gedrag per proces beïnvloeden met `oom_score_adj`:
echo -1000 | sudo tee /proc/<PID>/oom_score_adj
Een waarde van -1000 maakt een proces immuun voor de OOM-killer; +1000 maakt het een eerste kandidaat.
8. Ken de allocator-geschiedenis (voor context)
De kernel gebruikt verschillende allocators door de tijd heen. Deze kennis helpt bij het interpreteren van kernel-documentatie en het kiezen van optimalisaties:
- 1991: buddy allocator voor geheugenpagina’s - 1996: SLAB-allocator voor kernelobjecten - 2007: SLUB wordt standaard (betere prestaties, eenvoudiger onderhoud) - 2021 (v5.13): vmalloc huge page support - 2023: SLOB verwijderd (was voor zeer kleine systemen) - 2024 (v6.12): vrealloc — flexibeler herschikken van virtueel geheugen
Verificatie
Controleer of alles werkt:
vmstat 1 3
smem -rs uss | head -20
swapon --show
cat /sys/fs/cgroup/memory/mygroup/memory.usage_in_bytesU zou moeten zien: swap-activiteit in de `si`/`so`-kolommen, een lijst van processen gesorteerd op USS, uw swapfile in de swapon-output, en een geheugengebruik onder de 536870912 bytes voor de cgroup.
Veelgestelde problemen
Probleem 1: `smem` commando niet gevonden Installeer het pakket: `sudo apt install smem` of `sudo dnf install smem`. Op sommige systemen heet het pakket `smemstat`.
Probleem 2: OOM-killer beëindigt processen ondanks voldoende swap Controleer of `vm.swappiness` laag staat. De kernel wisselt anders te agressief. Stel in met:
sudo sysctl vm.swappiness=10
Maak dit permanent in `/etc/sysctl.conf`.
Probleem 3: cgroup-map niet aanwezig onder /sys/fs/cgroup Op systemen met cgroups v2 (kernel 4.5+) gebruikt u een andere interface. Bekijk de mount:
mount | grep cgroup
Bij cgroups v2 gebruikt u `echo "max" > /sys/fs/cgroup/
De kernel evolueert — de allocator van vandaag is over vijf jaar anders. Blijf de documentatiepagina’s volgen; de volgende wijziging staat al in de changelog van kernel v6.13.