A placa 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. Observar o / proc / meminfo mostrou que o Slab estava usando 88Gb, que é contado na memória usada fora do curso.

  1. Isso é um problema? Suspeito que a memória seja liberada quando necessário, mas não sei se isso pode ter efeitos colaterais indesejados.
  2. Por que Slab precisaria de tanta memória? Existe uma causa clara para isso?
  3. podemos evitar que isso aconteça no futuro?
  4. Como podemos liberar 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
Joris Meys
fonte

Respostas:

5

Você tem certeza absoluta de que este é um problema real: a RAM usada não é a mesma que a RAM indisponível (Veja, por exemplo, esta questão ServerFault em free / buffers / cache ), o reflexo de querer ter a memória listada como livre geralmente está errado.

Slab não é uma coisa específica, é um dos alocadores de memória dentro do kernel, em particular o slab permite que o kernel gerencie objetos que não são do tamanho de uma página (como apontado em outros lugares / proc / slabinfo e slabtop, deve fornecer uma indicação de o que ele está segurando no momento). Mais informações sobre laje podem ser encontradas aqui

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

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

Se você deseja controlar o comportamento do vmm, consulte / proc / sys / vm , em particular min_slab_ratio pode ser interessante. Você também pode limitar os caches de laje individuais por meio de / proc / slabinfo (consulte o artigo ibm developerworks para obter detalhes). Porém, antes de começar a ativar o vmm e a laje: descubra o que você realmente deseja realizar e faça algumas pesquisas sobre o vmm e como ele pode ser ajustado para ajustar-se às suas cargas de trabalho. É bem possível interromper seu sistema de maneira sutil e espetacular, brincando com os botões de ajuste vmm.

Kjetil Joergensen
fonte
muito obrigado pela resposta em profundidade e as ligações
Joris Meys
1
O link IBM developerworks não funciona mais.
Ikke
11

Use as informações do cache slabtop display kernel slab:

slabtop

Também veja "vmstat -m":

vmstat  -m

e veja / proc / slabinfo:

cat /proc/slabinfo

Solte o cache para liberar memória

sync; echo 3 > /proc/sys/vm/drop_caches
ooshro
fonte
thx pelos comandos, eles tornam a vida um pouco mais fácil.
Joris Meys