Linux Tux in orange background

Reduza o uso do SWAP e melhore o desempenho do Linux

Na lista de coisas que se pode fazer para melhorar o desempenho do Linux, este é um dos primeiros itens — principalmente em equipamentos com pouca memória RAM (1 Gb ou menos).
Algumas distribuições Linux mais parrudas, como é o caso do Ubuntu, acabam por fazer uso muito intenso do acesso ao disco rígido, o que contribui consideravelmente para a lentidão do sistema como um todo.
Não esqueça de ler o texto Perguntas e Respostas sobre o SWAP, para tirar mais dúvidas sobre este assunto. 😉
disco rígido ubuntuNeste post, vou mostrar como reduzir o uso da memória SWAP no seu sistema.
Comumente, separamos uma partição exclusiva, no disco rígido, para a memória SWAP o que é uma boa prática.
Quando o sistema começa a fazer uso excessivo deste recurso, começa também a ficar mais lento, uma vez que o tempo de acesso ao disco rígido é milhares de vezes maior que o tempo de acesso à memória RAM.
A propensão do Ubuntu a usar o SWAP é determinada por um valor — quanto menor este valor, mais tempo o sistema irá demorar antes de começar a fazer uso deste recurso.
A variável (do sistema) que contém este valor, é a swappiness — e pode ir de 0 a 100 (sim, é um percentual).
Sugiro a leitura do artigo Explicação básica sobre gestão de memória no Linux, onde o uso do SWAP é discutido com mais profundidade —. Ele não é o responsável pela lentidão da sua máquina. Acredite.

Owen Wilson - Swapiness Linux
No Red Hat e no Ubuntu, o valor padrão do swappiness, é 60, o que pode ser muito alto para a maioria dos usuários normais do desktop. Especialistas indicariam este número como mais adequado para servidores.
No desktop, este número pode seguramente ser reduzido. Vou mostrar como.
No Ubuntu, esta variável fica armazenada no arquivo de sistema /proc/sys/vm/swappiness.
Você pode ver o valor de swappiness do seu sistema com o seguinte comando:

cat /proc/sys/vm/swappiness
O QUE DIZ A DOCUMENTAÇÃO DO RED HAT

«O swapiness é um valor de 0 à 100 que controla o grau para o qual o sistema altera. Um valor alto dá prioridade ao desempenho do sistema, alterando os processos de forma agressiva fora da memória física quando eles não estão ativos. Um valor baixo dá prioridade à interação e evita processos de alteração fora da memória física o quanto de tempo for possível, o que diminui a latência de resposta. O valor padrão é 60.»

Qual o valor mais indicado para swappiness?

Você pode seguir a regra geral, ditada por outros, ou pode fazer seus testes e chegar ao melhor número por si próprio. Só tenha cuidado com os extremos, pois você pode acabar com um sistema inoperante (ou quase).
A minha recomendação é de que você opte por um valor baixo, entre 10 e 20. Isto fará com que o sistema use menos o espaço de troca (swap) e tente se virar com o que tem, na memória física.
Veja, a seguir, como tornar a mudança do valor do swapiness permanente.

Torne a mudança permanente

A simples alteração do arquivo /proc/sys/vm/swappiness, é temporária e não produz resultado permanente.
Se você conseguir alterar este valor, o sistema o retornará ao padrão, assim que for reiniciado.
Contudo, é interessante testar valores diferentes, antes de decidir sobre qual é o mais adequado para o seu uso.
Você precisa alterar o arquivo /etc/sysctl.conf, para que a mudança seja permanente.
Abra-o com o seu editor de textos favorito (eu vou usar o nano):

sudo nano /etc/sysctl.conf

Agora, copie e cole o seguinte código ao final do arquivo:

#
# Reduz o uso de SWAP
vm.swappiness=10
# Melhora a gestão de cache
vm.vfs_cache_pressure=50

Em seguida, salve e saia do editor.
Reinicie a máquina e veja se houve melhora.

A conclusão de que a partição ou arquivo de swap está tornando o seu computador lento é, na maioria das vezes, equivocada.
Além disto, não ter qualquer dispositivo para fazer swap, não significa que o kernel passará a fazer uso mais eficiente da memória física presente no sistema.
A falta deste recurso implica em ter menos opções à disposição do kernel para gerenciar eficientemente a memória do sistema.
Tampouco, a quantidade de swap disponível não influencia a frequência com que ele será usado.
O Linux consegue lidar com a ausência de um espaço de troca.
Quando a memória física se exaurir, contudo, o kernel iniciará uma “matança quase indiscriminada de processos” no seu sistema, para criar espaço de trabalho. Para isto existe um mecanismo chamado OOM-Killer ou out-of-memory-killer.

conclusão

Antes de alterar o valor do swappiness, leve em consideração que o valor deste parâmetro do kernel indica a partir de que ponto o sistema deve começar a fazer uso do SWAP — se o valor for ’60’, o kernel começará a usar o SWAP quando a memória RAM atingir 40% de sua capacidade.
Ajustar o parâmetro para ‘100’, fará com que o kernel envie tudo pro SWAP.
No meu exemplo, ajustei o swappiness para ’10’ — assim o SWAP só começará a ser usado quando a memória RAM estiver 90% cheia.
O valor que eu usei é seguro em sistemas com 2 Gb ou mais.
Se você ajustar o valor para ‘0’ o sistema só irá swapear quando a memória RAM estiver esgotada.
Em sistemas com 1Gb de memória RAM ou menos, usar valores muito baixos pode causar travamentos.
A minha compreensão é de que o uso do SWAP é para situações extraordinárias, quase “emergenciais”. Não faz sentido, portanto, usar memória virtual na maioria dos casos.
Se a carga de trabalho é grande, você deve planejar a aquisição de mais memória física, em vez de resolver (mal) o problema com o uso de memória virtual.

Publicado por

Elias Praciano

Autor de tecnologia (livre, de preferência), apaixonado por programação e astronomia. Fã de séries, como "Rick and Morty" e "BoJack Horseman". Me siga no Twitter e vamos trocar ideias!

17 comentários sobre “Reduza o uso do SWAP e melhore o desempenho do Linux”

  1. Boa noite!!! Obrigado pelo ótimo artigo. Graças a você fiz o seguinte no meu sistema Android AOSP 5.1.1 com Root. Instalei o Swapper for Tools e configurei ele pra criar um arquivo Swap de 768MB com Swappines em 30 na memoria interna do meu Moto G2 que é de 16GB. A RAM desse smartphone é de 1GB. O que você achou dessa configuração? Está boa pra esse aparelho?

      1. Antes a minha configuração swap estava em 512MB com swappines em 40, mas mesmo assim notava que o sistema não estava usado essa memoria com folga para as tarefas. Peguei a referencia do Galaxy S2 Lite que tem memoria RAM de 768MB pra criar um arquivo swap com mesmo valor e após ler vários artigos sobre o assunto e entender o funcionamento do swappines, deixei ele em 30 como havia falado antes. Por enquanto está tudo normalizado e não estou notando o fechamento de alguns apps para dar folga a memoria RAM. Só o uso diário irá dizer se esta tudo ok.

  2. Um computador (linux) com 4giga de RAM ou mais não precisa de Swap (na minha opinião)… Nessas condições o Swap pode se tornar um estorvo… Eu simplesmente desativo ele através do GParted.

    1. Com 4 GB de memória RAM, é possível que um usuário comum nunca use o SWAP.
      Ainda assim, ele pode dar a segurança de evitar travamento do sistema.
      Com esta configuração, você pode separar entre 2 e 8 GB para o SWAP.
      Entenda melhor por que você não deve abrir mão completamente deste recurso e veja uma tabela, que vai ajudar a determinar qual a quantidade adequada de SWAP para cada caso, neste artigo.

    1. A variável vm.vfs_cache_pressure controla a tendência do kernel a pedir memória a ser usada para caching — em detrimento do pagecache e do swap.
      Aumentar este valor fará com que o kernel pressione por mais memória cache do VFS.

  3. No meu servidor 32bits com 3GB de ram a ocupação era de aproximadamente 500MB e o swap ocupava sempre em torno de 150MB. Baixei o swappiness de 60 para 10 como sugerido e agora o swap fica sempre em zero de ocupação. Por incrível que pareça o login via ssh ficou estupidamente mais rápido, creio que ele era um dos processos “dormindo” na swap, a demora era na hora de autenticar a senha e agora é praticamente instantâneo.

  4. Boa Tarde. Eu utilizo três SO’s(Ubuntu 14.04,Elementary OS Luna e Mint 17.1) em uma maquina antiga com dois hd’s,sendo o Ubuntu e o Elementary no mesmo HD e o Mint em outro.E em todos os testes que fiz nunca observei o uso do swap em nenhuma distro. Sendo o Ubuntu 64 bits e os demais 32 bits. E olha que já renderizei vídeos nessa maquina, um suplicio, mais de duas horas renderizando videos de segundos.Pra ter uma ideia de quanto é antiga olha as configurações do bichinho: Processador Intel Pentium D Dual cpu E2200 2,20GHz
    Placa Mãe: Gigabyte 945GZM-S2
    Memória: DDR2 2x 2 gigas
    Placa de vídeo Nividia GeForce 8400 512MB
    Vou dar uma testada na dica pra ver o que acontece.Depois digo algo.Um abraço!

    1. Dá para afirmar, com boa dose de certeza, que é muito difícil um usuário necessitar usar a memória SWAP, atualmente — em função da capacidade extraordinária que o Linux tem de gerenciar a memória.
      A principal função da partição SWAP, na maioria dos casos é permitir a hibernação do sistema.
      Este site tem artigos interessantes (na minha opinião) sobre o SWAP — eles podem ser encontrados através da caixa de pesquisa/busca, no topo da página. 😉

    1. O uso do SWAP, no Linux e em qualquer outro sistema operacional, está mais ligado às necessidades dos softwares em execução do que às configurações de hardware.
      As dicas deste artigo se referem à PCs e notebooks de uso geral.
      Se você se refere a um servidor, vai precisar consultar os manuais dos softwares instalados para saber qual a melhor configuração pro seu caso.

    1. Tentar alterar o arquivo /proc/sys/vm/swappiness vai produzir este resultado.
      Não o altere: não adianta nada.
      O único arquivo que você precisa alterar é /etc/sysctl.conf, conforme explicado no texto.

Deixe uma resposta

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