excluindo ram do cache do Linux [duplicado]

17

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

Além disso, eu tenho arquivos de idioma que são gravados em arquivos simples no servidor, onde a memória RAM em cache é definitivamente boa, em vez de ler a partir do disco. Mas há apenas um punhado de arquivos como este.

Em cerca de duas semanas eu passei de 98% de RAM livre para 4% de RAM livre. Isso ocorreu durante um tempo em que também enviamos várias atualizações svn para o servidor.

Minha pergunta é se meu servidor será mais bem ajustado se eu limpar meu cache periodicamente (estou ciente da sensação 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, devo ter muito menos troca acontecendo e muito mais reutilização de cache obsoleto.

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

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

    
por Patrick R 23.01.2010 / 07:38

1 resposta

17

A limpeza de caches prejudicará o desempenho, não ajuda. 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 ter executado a limpeza.

Se os dados em cache estiverem muito desatualizados (ou seja, são 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.

O único motivo para executar sync; echo 3 > /proc/sys/vm/drop_caches normalmente é se você vai tentar alguns testes de desempenho de E / S e deseja que um estado conhecido seja iniciado (executando a queda de cache entre execuções para reduzir as diferenças nos resultados devido à cache sendo preparado de forma diferente em cada execução).

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

    
por 23.01.2010 / 11:50