Como transformar o linux para manter o 'cache' alto?

1

Estamos executando um serviço pesado no Debian. Nosso serviço gera muita E / S de arquivos e seu desempenho depende de quão bem o kernel do Linux armazena os arquivos em cache.

Nosso sistema tem 64GB de memória. O tamanho total do arquivo é de 500 GB (muitos arquivos pequenos). Esses arquivos são servidos via reiserfs no raid. O kernel é 3.2.9 agora. (esta não é uma questão nova. Temos esse problema há vários anos.)

Normalmente, a maior parte do conteúdo dos arquivos é armazenada em cache e nosso sistema é executado sem problemas. O comando free (1) mostra o cache de memória 14G, o buffer de memória 10G e a memória 8G estão livres.

No entanto, no nosso horário de pico, eu encontrei o kernel do Linux liberado a maior parte do cache / buffer e os mantive em estado livre. Na minha opinião, é um desperdício enorme para manter a memória em estado livre e eu acho que é a razão que o nosso serviço sobrecarrega em horas ocupadas. comando free (1) mostra algo como cache 2G, 2G buffer e 28G grátis.

Minha pergunta é, em que situação o kernel do linux deseja liberar memória ao invés de cache / buffering. E como evitar esse comportamento? Existe alguma configuração que possamos ajustar?

(deixe-me saber se você precisa de mais informações sobre nosso hardware / sistema / serviço)

    
por kcwu 21.04.2012 / 19:50

3 respostas

2

Existem duas razões pelas quais isso aconteceria.

Um, que espero que você possa descartar, é uma pessoa ou um script ordenando que faça isso. Por exemplo, alguém enviando um comando para /sys/vm/drop_caches .

O outro é se essa memória é necessária para algum outro propósito. Se um aplicativo exigir muita memória, o kernel fornecerá ao aplicativo essa memória, reduzindo o cache conforme necessário. Quando a aplicação é feita com essa memória, ela ficará livre. Ele só será preenchido com dados em cache ao longo do tempo.

Pode haver algumas coisas que você pode fazer se esse for o caso. Por exemplo, se o uso de memória estiver acontecendo porque você está tentando processar quatro solicitações de uma só vez, convém reconfigurar para fazer duas solicitações de uma vez no máximo. Se isso permitir que você mantenha mais dados no cache, poderá ser uma vitória geral no desempenho.

    
por 21.04.2012 / 23:12
1

É possível colocar qualquer coisa em um ramdisk? Cache explícito se você quiser. Não tenho certeza se o que você está fazendo combina com isso, e você provavelmente pensou nisso, mas eu vou jogá-lo lá fora;)

Dê uma olhada aqui: link

existem alguns bits que você pode ajustar facilmente, apenas por valores "cat" ing em. vfs_cache_pressure & zone_reclaim_mode salta, ressalva: apenas um que eu já ajustei é swappiness.

    
por 21.04.2012 / 22:00
0

A enorme free memória é provavelmente causada por um ou mais processos de curta duração que requerem muita memória. O kernel do Linux usará memória livre para caches, mas esses caches serão descartados em vez de usar swap, caso algum processo adquira mais memória, mesmo por um curto período. Dos números que você forneceu, parece que o sistema verá uma carga extra de 20 GB de RAM durante o seu horário de pico e isso é muito para o seu sistema porque os caches ficam muito pequenos.

Eu tentaria registrar os processos em execução perto do tempo que você está vendo seus caches caírem (por exemplo, registre date; free -m; ps auxw a cada 5 segundos em um arquivo até ver o problema).

    
por 13.01.2018 / 19:00