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:
- Sincronize os dados para evitar perda:
sync
O comando sync garante que todos os dados em buffers sejam gravados no disco.
- 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
- 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.
- 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.
- 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
- Ajuste o vfs_cache_pressure:
O parâmetrovm.vfs_cache_pressurecontrola 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_sizepara 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
swappinessevfs_cache_pressurepode 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:
- Limpar manualmente (apenas para testes): Use
sync; echo 3 | sudo tee /proc/sys/vm/drop_caches, mas evite em produção. - Ajustar parâmetros do kernel: Configure
vm.swappiness=10evm.vfs_cache_pressure=200em/etc/sysctl.confpara reduzir a prioridade do cache, testando cuidadosamente. - Otimizar aplicativos: Identifique processos (com
htopoutop) que geram alto I/O e ajuste suas configurações (ex.: MySQL, Apache). - 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.




