Limpar cache de memória no Amazon EC2

1

Em nosso projeto, temos alguns testes que duram cerca de 3-4 horas continuamente. No devido tempo, os testes falham porque não encontraram memória suficiente. No googling, descobri que executar o seguinte comando me ajuda a retomar meus testes:

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

No entanto, esses testes são noturnos e nos ajudariam muito se pudéssemos executá-lo sem intervenção manual.

Estou apenas olhando para as opções para fazer isso.

Encontrei alguns links 1 e 2 que, pela aparência, poderia ser útil.

Eu só queria saber minhas outras opções antes de poder ir em frente e atualizar as abas cron.

Há algum problema em limpar o cache periodicamente? Isso causará outros problemas?

O aumento da RAM será útil? Quais são minhas alternativas?

    
por Karthick R 28.04.2014 / 15:14

1 resposta

2

Will increasing the RAM be helpful?

Difícil dizer sem saber por que seus testes são bem-sucedidos depois de executar esses dois comandos ( sync e drop_caches ). TBH Não acho que descartar o cache do sistema de arquivos é o que permite que seus testes funcionem, a menos que seus testes estejam falhando devido a problemas de latência. Quando o kernel percebe que as coisas estão abaixo de min_free_kbytes , ele começa a remover as entradas mais antigas do cache para obter a memória livre de pelo menos min_free_kbytes . A única exceção a esse processo é para páginas marcadas como "sujas". Portanto, a existência de um cache do sistema de arquivos geralmente não é um problema, a menos que seus aplicativos estejam alocando a memória mais rápido do que o kernel pode localizar as entradas a serem removidas (nesse caso, o aumento de min_free_kbytes está em ordem).

O comando que provavelmente está fazendo mais por você é o comando sync que provavelmente libera memória dedicada aos buffers usados para E / S de disco assíncrono (removendo também dirty de todas as entradas no cache do sistema de arquivos, tornando candidatos a despejo em condições de baixa memória).

Eu coloquei as probabilidades em cerca de 80-90% que adicionar mais memória RAM seria útil , mas eu não sei quais testes você está executando, então não posso dizer com certeza.

Is it ok to clean up cache periodically? Will it cause other issues?

O que você está fazendo aqui é basicamente o ajuste de desempenho (ou pelo menos você está jogando com sintonizadores disponíveis para esse propósito). Tunables são geralmente disponibilizados quando se sabe que a resposta "certa" em geral é considerada impossível / impraticável. Se fosse possível criar regras gerais sobre como as coisas deveriam ser executadas, elas apenas fariam com que o software fizesse isso e deixassem o administrador fora de questão.

Tudo isso para dizer que não podemos dizer com certeza absoluta que isso não causará problemas para você. Podemos dizer que provavelmente não causará perda de funcionalidade mas não podemos ter certeza. Eu diria que o cache do sistema de arquivos foi projetado para melhorar o desempenho, forçando os aplicativos a esperar que os dados cheguem do disco sempre que lerem algo provavelmente não é desejável (embora às vezes possa ser indesejável, mas necessário).

EDITAR:

Apenas leia o comentário de @ Emmanuel. Ele traz um bom ponto. Se você tiver espaço de troca não utilizado, poderá tentar aumentar vm.swappiness para aumentar a preferência do kernel de trocar a memória de aplicativo menos utilizada. Se você precisar de mais espaço de troca (ou não tiver nenhum), poderá encontrar instruções on-line para criar partições de troca e trocar arquivos.

EDIT # 2

Eu não joguei com este, mas olhando para os documentos do kernel, há um dirty_ratio sysctl sintonizável, que controla quanto de dados sujos serão mantidos na memória antes que o kernel faça seu próprio sync , você pode tente abaixar isso para que apenas algumas páginas no cache do sistema de arquivos sejam marcadas como "sujas" e possam ser despejadas quando a memória for necessária.

    
por 28.04.2014 / 16:11