User Tools

Site Tools


doc:appunti:linux:sa:linux_virtual_memory

Linux Virtual Memory

Diagnosi di Out of Memory Killer

Come diagnosticare problemi Out of Memory Killer? Nel syslog si legge quanto segue:

kernel: apache2 invoked oom-killer: gfp_mask=0x100cca(GFP_HIGHUSER_MOVABLE),
        order=0, oom_score_adj=0
...
kernel: Mem-Info:
kernel: active_anon:31868 inactive_anon:3867772 isolated_anon:0
kernel:  active_file:196 inactive_file:169 isolated_file:0
kernel:  unevictable:3724 dirty:0 writeback:0
kernel:  slab_reclaimable:8784 slab_unreclaimable:23394
kernel:  mapped:32570 shmem:33575 pagetables:16400 bounce:0
kernel:  free:33008 free_pcp:981 free_cma:0
...
kernel: Tasks state (memory values in pages):
kernel: [  pid  ]   uid  tgid total_vm      rss pgtables_bytes swapents oom_score_adj name
kernel: [    279]     0   279    54600      891   462848        0          -250 systemd-journal
...
kernel: [2109336]    33 2109336    77411    14582   282624        0             0 apache2
kernel: [2109339]    33 2109339    76387    14063   274432        0             0 apache2
kernel: [2109340]    33 2109340    75360    12557   262144        0             0 apache2
...
kernel: Out of memory: Killed process 1102 (mariadbd) total-vm:2663252kB, anon-rss:429744kB,
        file-rss:0kB, shmem-rss:0kB, UID:106 pgtables:1172kB oom_score_adj:0

Quindi una richiesta di allocazione memoria da parte del processo apache2 ha causato il kill del processo mariadbd. Anche l'elenco dei processi Tasks state evidenzia la presenza di 151 processi apache2.

vmstat -s
cat /proc/meminfo

Oltre all'ovvio MemFree, è forse più importante il valore di MemAvailable. Il primo valore infatti tenderà normalmente ad avvicinarsi allo zero: tutta la RAM verrà infatti utilizzata ad esempio per il caching delle pagine lette da disco. Tale memoria in genere non viene rilasciata se non quando serve per altri scopi. Per diagnosticare problemi di Out of Memory Killer è più importante il valore di MemAvailable, poiché esso contiene una stima di quanta memoria è disponibile per avviare nuovi processi.

Un parametro da tenere sotto osservazione è la memoria Active (composta da Active(anon) e Active(file)). In generale questo parametro dovrebbe rimanere costante nel tempo e non dovrebbe presentare un grafico a scalini crescenti.

MemFree The amount of physical RAM, in kibibytes, left unused by the system.
MemAvailable An estimate of how much memory is available for starting new applications, without swapping.
Active The amount of memory, in kibibytes, that has been used more recently and is usually not reclaimed unless absolutely necessary.
Active(anon) The amount of anonymous and tmpfs/shmem memory, in kibibytes, that is in active use, or was in active use since the last time the system moved something to swap.
Active(file) The amount of file cache memory, in kibibytes, that is in active use, or was in active use since the last time the system reclaimed memory.

Come rilasciare la cache

Per rilasciare le PageCache si può usare il comando:

sync; echo 1 > /proc/sys/vm/drop_caches

Dovrebbero andare a zero diversi contatori, tra cui quello della Active memory.

Il parametro 1 scritto nello pseudofile può assumere valori diversi, a seconda di cosa si voglia rilasciare:

1 Clears only the page cache.
2 Clears dentries and inodes.
3 Clears page cache, dentries, and inodes.

Web References

doc/appunti/linux/sa/linux_virtual_memory.txt · Last modified: 2023/12/18 12:42 by niccolo