excluindo RAM em cache do Linux

excluindo RAM em cache do Linux

Eu tenho um servidor web com 8 GB de RAM e está executando um site php bastante intensivo (1 site) que faz manipulação de arquivos, gráficos, envio de e-mail, fóruns, etc. O ambiente está longe de ser estático, o que me leva a acreditar que muito pouco poderia ser ganho com o armazenamento em cache de qualquer coisa na memória RAM, já que quase todas as solicitações ao servidor criam páginas novas ou atualizadas. E muito cache é feito no lado do cliente, então temos uma tonelada de 304 solicitações quando se trata de imagens, javascript, css.

Além disso, tenho arquivos de idioma que são gravados em arquivos simples no servidor, onde a memória RAM armazenada em cache é definitivamente boa, em vez de ler no disco. Mas existem apenas alguns arquivos como este.

Em cerca de duas semanas, passei de 98% de memória RAM livre para 4% de memória RAM livre. Isso ocorreu durante um período em que também enviamos várias atualizações grandes do svn para o servidor.

Minha pergunta é se meu servidor ficará melhor ajustado se eu limpar meu cache periodicamente (estou ciente do sentimento de Linus Torvalds sobre o cache) usando o seguinte comando:

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

Ou seria melhor editar o seguinte arquivo:

/proc/sys/vm/swappiness  

Se eu substituir o valor padrão de 60 por 30, terei muito menos trocas e muito mais reutilização de cache obsoleto.

Com certeza é bom ver todo esse cache liberado usando o primeiro comando, mas eu estaria mentindo para você se dissesse que isso é bom para o ambiente de desktop. Mas e um servidor web como o que descrevi acima? Pensamentos?

EDIT: Estou ciente de que o sistema irá adquirir memória conforme necessário da memória cache, mas obrigado por apontar isso para maior clareza. Estou imaginando coisas quando o Apache fica lento quando a maior parte da memória do servidor está armazenada no cache? Essa é uma questão completamente diferente?

Responder1

Limpar caches prejudicará o desempenho, não ajudará. Se a RAM fosse necessária para outra coisa, ela seria usada por outra coisa, então tudo o que você está fazendo é reduzir a taxa de acertos/erros do cache por um tempo depois de realizar a limpeza.

Se os dados no cache estiverem muito desatualizados (ou seja, são itens armazenados em cache durante uma operação incomum), eles serão substituídos por dados "mais recentes", conforme necessário, sem que você os limpe artificialmente.

A única razão para executar sync; echo 3 > /proc/sys/vm/drop_cachesnormalmente é se você tentar fazer alguns testes de desempenho de E/S e desejar um estado conhecido para iniciar (executando a queda do cache entre as execuções para reduzir diferenças nos resultados devido ao cache ser preparado de forma diferente em cada correr).

Às vezes, o kernel troca algumas páginas, mesmo que haja bastante RAM que possa ser recuperada do cache/buffers, e ajustar a configuração de troca pode impedir isso se você achar que isso é um problema para o seu servidor. Você pode ver um pequeno benefício com isso, mas provavelmente verá um desempenho temporárioderrubarlimpando o cache+buffer artificialmente.

informação relacionada