Servidores Web

Como reduzir o cache de memoria no servidor Linux?

Aprenda como reduzir o cache de memoria do seu servidor Linux. Digamos que você possui um VPS com 6 GB de RAM e ele opera com um cache de 4.5 na memoria RAM e você sente um incômodo com isso. Nos vamos te mostrar como resolver, mas apenas faça isso, somente em casos extremos e quando você souber o que está fazendo.

O cache de memória em um servidor VPS Linux (ou qualquer sistema baseado em Linux) é usado pelo sistema operacional para armazenar dados frequentemente acessados, como arquivos e páginas, para melhorar o desempenho. É importante entender que o cache de memória não é necessariamente um problema, pois o Linux utiliza a memória livre para caching, liberando-a automaticamente quando os aplicativos precisam de mais RAM. No entanto, se você deseja reduzir o uso de cache para liberar memória ou investigar o comportamento do sistema, aqui estão algumas abordagens:

Veja como reduzir o cache de memoria no seu servidor Linux

As etapas a seguir são sensíveis ao servidor e só devem ser propagadas por alguém com acesso root e experiência em servidores Linux. Para qualquer alteração em servidores, recomenda-se fazer um backup do site inteiro.

1. Entenda o Cache e o Comportamento do Linux

Antes de tentar reduzir o cache, verifique o uso real da memória com o comando free -h:

free -h

A saída será algo assim:

              total        used        free      shared  buff/cache   available
Mem:          5.8Gi       1.0Gi       0.5Gi       0.2Gi       4.1Gi       4.0Gi
Swap:         2.0Gi       0.0Gi       2.0Gi
  • buff/cache: Inclui o cache e buffers usados pelo sistema. Esses 4 GB que você vê provavelmente são buffers e cache, que o Linux mantém para otimizar o acesso a arquivos.
  • available: Mostra a memória disponível para aplicativos. Se essa quantidade for suficiente, o cache não está causando problemas.

Nota: O Linux usa memória livre para cache, mas libera automaticamente quando necessário. Reduzir o cache manualmente pode não ser necessário ou até prejudicar o desempenho, a menos que você tenha um caso específico.

2. Reduzir o Cache Manualmente (Somente para Testes)

Se você ainda deseja limpar o cache para liberar memória (por exemplo, para testes ou troubleshooting), pode usar o comando sync combinado com sysctl para liberar o cache. Cuidado: Isso pode impactar o desempenho, já que o cache será recriado quando os dados forem acessados novamente.

Execute os seguintes passos:

  1. Sincronize os dados para evitar perda:
   sync

O comando sync garante que todos os dados em buffers sejam gravados no disco.

  1. Limpe o cache:
    Use o comando abaixo para liberar diferentes tipos de cache:
   echo 1 | sudo tee /proc/sys/vm/drop_caches
  • echo 1: Limpa o cache de páginas.
  • echo 2: Limpa dentries e inodes.
  • echo 3: Limpa tudo (páginas, dentries e inodes). Exemplo para limpar tudo:
   sync; echo 3 | sudo tee /proc/sys/vm/drop_caches
  1. Verifique a memória novamente:
   free -h

Você verá que o valor em buff/cache diminuiu significativamente.

Aviso: Esse procedimento é temporário. O cache será reconstruído conforme o sistema for usado. Não é recomendado fazer isso em um servidor em produção, a menos que você tenha um motivo específico.


3. Ajustar o Comportamento do Cache

Se você deseja reduzir o uso de cache de forma mais permanente ou controlada, pode ajustar o parâmetro vm.swappiness e outras configurações do kernel. O swappiness controla a tendência do sistema de usar swap versus liberar cache.

  1. Verifique o valor atual do swappiness:
   cat /proc/sys/vm/swappiness

O valor padrão é geralmente 60. Valores mais baixos (ex.: 10) fazem o sistema priorizar manter dados na RAM em vez de usar swap, enquanto valores mais altos (ex.: 100) incentivam o uso de swap e podem reduzir o cache.

  1. Ajuste o swappiness:
    Para reduzir o uso de cache e priorizar memória livre, você pode testar um valor mais baixo:
   echo 10 | sudo tee /proc/sys/vm/swappiness

Para tornar a mudança permanente, edite o arquivo /etc/sysctl.conf ou um arquivo em /etc/sysctl.d/:

   sudo nano /etc/sysctl.conf

Adicione ou edite a linha:

   vm.swappiness=10

Aplique a mudança:

   sudo sysctl -p
  1. Ajuste o vfs_cache_pressure:
    O parâmetro vm.vfs_cache_pressure controla como o kernel gerencia o cache de inodes e dentries. O valor padrão é 100. Valores maiores (ex.: 200) fazem o sistema liberar cache mais rapidamente, enquanto valores menores (ex.: 50) mantêm o cache por mais tempo. Teste um valor maior:
   echo 200 | sudo tee /proc/sys/vm/vfs_cache_pressure

Para tornar permanente, adicione ao /etc/sysctl.conf:

   vm.vfs_cache_pressure=200

Aplique:

   sudo sysctl -p

Nota: Ajustar esses parâmetros pode impactar o desempenho, especialmente se seu servidor depende de cache para operações rápidas de I/O. Teste em um ambiente controlado antes de aplicar em produção.

4. Identifique Aplicativos Consumindo Memória

Às vezes, o alto uso de cache pode ser um sintoma de aplicativos que estão consumindo muitos recursos de I/O. Verifique quais processos estão usando memória:

top

Ou use htop para uma visualização mais amigável:

sudo apt install htop
htop

Se algum aplicativo específico (como um banco de dados ou servidor web) estiver gerando muito cache, considere otimizá-lo:

  • MySQL/MariaDB: Ajuste o parâmetro innodb_buffer_pool_size para limitar o uso de memória.
  • Apache/Nginx: Verifique configurações de cache ou limite o número de processos/threads.
  • Outros serviços: Analise logs e configurações específicas.

5. Considere Aumentar a Memória ou Swap

Se o cache está consumindo muita memória e os aplicativos estão sofrendo com pouca memória disponível, considere:

  • Aumentar a RAM: Um VPS com 6 GB pode ser insuficiente para cargas de trabalho pesadas. Considere fazer um upgrade.
  • Adicionar ou ajustar swap: Se não houver swap ou ele for pequeno, adicione um arquivo de swap:
  sudo fallocate -l 2G /swapfile
  sudo chmod 600 /swapfile
  sudo mkswap /swapfile
  sudo swapon /swapfile

Para tornar permanente, adicione ao /etc/fstab:

  /swapfile none swap sw 0 0

6. Monitore o Desempenho

Para entender melhor o comportamento do cache, use ferramentas como:

  • vmstat: Monitora uso de memória e I/O.
  vmstat -s
  • iotop: Verifica quais processos estão gerando I/O.
  sudo apt install iotop
  sudo iotop

Considerações Finais

  • O cache de memória no Linux é projetado para melhorar o desempenho, e sua presença não significa que a memória está sendo desperdiçada.
  • Evite limpar o cache manualmente em produção, a menos que seja necessário para testes específicos.
  • Ajustar swappiness e vfs_cache_pressure pode ajudar, mas faça isso com cuidado e teste exaustivamente.
  • Monitore os processos e otimize os aplicativos para reduzir a pressão sobre a memória.

Conclusão:

O cache de memória no seu VPS Linux com 6 GB de RAM, que está ocupando 4 GB, é um comportamento normal do sistema operacional para otimizar desempenho, liberando memória automaticamente quando necessário. Para reduzir o cache, você pode:

  1. Limpar manualmente (apenas para testes): Use sync; echo 3 | sudo tee /proc/sys/vm/drop_caches, mas evite em produção.
  2. Ajustar parâmetros do kernel: Configure vm.swappiness=10 e vm.vfs_cache_pressure=200 em /etc/sysctl.conf para reduzir a prioridade do cache, testando cuidadosamente.
  3. Otimizar aplicativos: Identifique processos (com htop ou top) que geram alto I/O e ajuste suas configurações (ex.: MySQL, Apache).
  4. Considerar mais recursos: Aumente a RAM ou adicione swap se a memória disponível for insuficiente.

Monitore o sistema com free -h, vmstat ou iotop para garantir que as mudanças não afetem o desempenho. Geralmente, o cache não é um problema, mas otimizações podem ser feitas com base na sua carga de trabalho.

Artigos relacionados

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Botão Voltar ao topo