Slab usa 88Gb de 128Gb disponíveis. O que poderia causar isso?

8

Nós rodamos um debian 2.6.26-2-amd64 x86_64 GNU / Linux em um servidor com 128 Gb. Recentemente nossa memória disponível tornou-se bastante baixa. Olhando para o / proc / meminfo mostrou que o Slab estava usando 88Gb, que é contado na memória usada fora do curso.

  1. Isso é um problema? Eu suspeito que a memória será liberada quando necessário, mas não sei se isso poderia ter efeitos colaterais indesejados.
  2. Por que a laje precisaria de muita memória? Existe uma causa clara para isso?
  3. podemos evitar que isso aconteça no futuro?
  4. Como podemos libertar essa memória?

agradeço antecipadamente

> cat /proc/meminfo
MemTotal:     132304500 kB
MemFree:      26669388 kB
Buffers:        237504 kB
Cached:       11881136 kB
SwapCached:         48 kB
Active:        5244640 kB
Inactive:     11714308 kB
SwapTotal:     5751228 kB
SwapFree:      5750436 kB
Dirty:              24 kB
Writeback:           0 kB
AnonPages:     4840256 kB
Mapped:         163968 kB
Slab:         88314840 kB
SReclaimable: 88275644 kB
SUnreclaim:      39196 kB
PageTables:      80852 kB
NFS_Unstable:        0 kB
Bounce:              0 kB
WritebackTmp:        0 kB
CommitLimit:  71903476 kB
Committed_AS:  6818332 kB
VmallocTotal: 34359738367 kB
VmallocUsed:    505724 kB
VmallocChunk: 34359231963 kB
    
por Joris Meys 25.02.2011 / 15:41

2 respostas

5

Tem certeza absoluta de que este é um problema real: a RAM usada é não igual à memória RAM indisponível (Veja isto ServerFault pergunta em livre / buffers / cache ), o reflexo de querer ter memória listada como livre é muitas vezes errado .

O Slab não é uma coisa específica, é um dos alocadores de memória dentro do kernel, em particular laje permite ao kernel gerenciar objetos que não são do tamanho da página (como apontado em outros lugares / proc / slabinfo e slabtop devem dar a você alguma indicação do que ela está segurando no momento). Mais informações sobre a placa podem ser encontradas aqui

Se você vir o SReclaimable abaixo de Slab, é da opinião que quase toda a memória alocada pela placa pode ser recuperada quando / se necessário. Então, sim, a memória será liberada quando necessário. O custo acessório da recuperação está pagando alguns custos de contabilidade diferidos em ciclos de cpu.

Não tenho certeza se slab falando estritamente precisa de toda essa memória, em muitos casos reterá objetos inicializados para uso posterior (salvando a inicialização), alguns deles são vários caches, a maioria é provavelmente benéfica (Ou seja, os efeitos dos caches do sistema de arquivos são imensos).

Se você quiser controlar o comportamento do vmm, confira / proc / sys / vm , em particular min_slab_ratio pode ser de interesse. Você também pode limitar os caches slab individuais por meio de / proc / slabinfo (consulte o artigo ibm developerworks para detalhes). Embora, antes de começar a ligar o vmm e a laje: descubra o que você realmente quer realizar, e faça algumas pesquisas sobre o vmm e como ele pode ser ajustado para se ajustar à sua carga de trabalho. É bem possível quebrar seu sistema de maneira sutil e espetacular, tocando com botões de ajuste de vmm.

    
por 26.02.2011 / 20:00
11

Use as informações do cache slab do kernel de exibição do slabtop:

slabtop

Veja também "vmstat -m":

vmstat  -m

e olhe / proc / slabinfo:

cat /proc/slabinfo

Drop cache para liberar memória

sync; echo 3 > /proc/sys/vm/drop_caches
    
por 25.02.2011 / 15:57

Tags