O kernel é um pouco impróprio. O kernel do Linux é composto de vários processos / threads + os módulos ( lsmod
), então, para obter uma imagem completa, é necessário observar a esfera inteira e não apenas um único componente.
Aliás, o meu mostra slabtop
:
Active / Total Size (% used) : 173428.30K / 204497.61K (84.8%)
A página man do slabtop
também dizia:
The slabtop statistic header is tracking how many bytes of slabs are being used and it not a measure of physical memory. The 'Slab' field in the /proc/meminfo file is tracking information about used slab physical memory.
Eliminar caches
Soltando meus caches como @derobert sugerido nos comentários sob sua pergunta faz o seguinte para mim:
$ sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
$
Active / Total Size (% used) : 61858.78K / 90524.77K (68.3%)
O envio de um 3 faz o seguinte: pagecache, dentries e inodes gratuitos. Eu discuto isto mais neste U & Q Q & A intitulado: Existem maneiras ou ferramentas para despejar o cache de memória e buffer? ". Então, 110MB do meu espaço estava sendo usado apenas mantendo as informações sobre o pagecache, dentries e inodes.
Informações adicionais
- Se você estiver interessado, encontrei este post do blog que discute
slabtop
em mais detalhes. É intitulado: Comando Linux do dia: slabtop . - O Cache Slab é discutido com mais detalhes aqui na Wikipedia, intitulado: Alocação de placas .
Então, quanto RAM meu kernel está usando?
Esta foto é um pouco mais nebulosa para mim, mas aqui estão as coisas que "eu acho" que conhecemos.
Slab
Podemos obter um instantâneo do uso do Slab usando essa técnica. Essencialmente, podemos extrair essa informação de /proc/meminfo
.
$ grep Slab /proc/meminfo
Slab: 100728 kB
Módulos
Além disso, podemos obter um valor de tamanho para os módulos do Kernel (não está claro se o tamanho deles está no disco ou na RAM), puxando esses valores de /proc/modules
:
$ awk '{print $1 " " $2 }' /proc/modules | head -5
cpufreq_powersave 1154
tcp_lp 2111
aesni_intel 12131
cryptd 7111
aes_x86_64 7758
Slabinfo
Muitos dos detalhes sobre o SLAB estão acessíveis nesta estrutura proc, /proc/slabinfo
:
$ less /proc/slabinfo | head -5
slabinfo - version: 2.1
# name <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <active_slabs> <num_slabs> <sharedavail>
nf_conntrack_ffff8801f2b30000 0 0 320 25 2 : tunables 0 0 0 : slabdata 0 0 0
fuse_request 100 125 632 25 4 : tunables 0 0 0 : slabdata 5 5 0
fuse_inode 21 21 768 21 4 : tunables 0 0 0 : slabdata 1 1 0
Dmesg
Quando o seu sistema inicializa, há uma linha que relata o uso da memória do kernel do Linux logo após o carregamento.
$ dmesg |grep Memory:
[ 0.000000] Memory: 7970012k/9371648k available (4557k kernel code, 1192276k absent, 209360k reserved, 7251k data, 948k init)