Adicionando Swap ao CentOS, Ubuntu e derivados · Buteco Tecnológico
23/07/2015 · 5 minutos de leitura
Para você que acabou de criar a sua primeira VM no Digital Ocean e pegou logo de cara a de 512 de RAM, você vai se ver no aperto dependendo da aplicação que colocar para executar nela. Para solucionar possíveis problemas de falta de memória vamos adicionar Swap a esta máquina tão simplória.
Aplicações simples como o MySQL e o Jenkins rodando nessas máquinas poder gerar alguma dor de cabeça caso você não identifique que o problema é falta de memória. Por exemplo, no meu caso o Jenkins parava a execução dos testes no meio, pois recebia um SIGKILL de alguém, provavelmente do S.O. O mais estranho é que o Jenkins continuava executando, apenas parava o Job que estava em execução. A solução foi bem simples, adicionar uma Swap, já que não queríamos aumentar os valores com VMs do DO.
O tutorial de hoje é baseado no CentOS e no Ubuntu. Fiz a mesma configuração em duas VMs distintas. A maioria das distros suportam os comandos e sistemas de arquivos aqui mencionados.
Verificando a existência de Swap
Vamos verificar se existe Swap habilitado primeiro, para isso execute o comando:
Não deverá retornar nada caso não tenha Swap.
O mesmo pode ser observado com o comando:
Que neste caso irá retornar 0, conforme abaixo:
Mem:           490        399         91          8         24        263
-/+ buffers/cache:        111        378
Antes de começar vamos verificar se existe algum espaço em disco que podemos usar, para isto execute o comando:
O retorno deverá ser algo semelhante ao abaixo:
/dev/vda1        20G  1,5G   18G   9% /
tmpfs           246M  8,3M  237M   4% /run
Agora que verificamos quanto temos de espaço em disco vamos a criação do arquivo de Swap.
Como definir um bom tamanho para o Swap?
O recomendado em qualquer distribuição é o dobro de memória RAM para máquinas com até 8 GB de RAM. Caso sua máquina tenha mais que isso não há necessidade se sua Swap ser maior que 16 GB. Vale lembrar que Swap é algo que não queremos que se use em grande quantide, pois isto afeta o desempenho da máquina. Se você notar que o sistema está usando quase toda a Swap isto quer dizer que é necessário um upgrade de RAM.
O modo mais rápido para criar um arquivo swap é com o comando fallocate. O fallocate é usado para pré-alocar espaço para um arquivoe para ser rápido ele preenche o arquivo com zeros. O fallocate suporta os sistemas de arquivos btrfs, ext4, ocfs2 e xfs.
Eu vou criar o arquivo com 1 GB no raiz (/) com o nome swapfile. Para isto vou usar o comando abaixo:
Para testar se o arquivo foi criado corretamente com o comando:
E o resultado deverá ser semelhante ao abaixo:
-rw-r--r-- 1 root root 1,0G Mai 28 20:09 /swapfile
Habilitando o Swap
Antes de habilitar o Swap, vamos mudar as permissões do arquivo, para que ninguém além do root tenha acesso à ele. Para isto executamos o comando:
Você pode verificar as permissões com o comando:
-rw------- 1 root root 1,0G Mai 28 20:09 /swapfile
Agora que tiramos as permissões para os demais usuários, podemos montar o Swap. Para isto execute o comando:
O resultado, se tudo ocorrer bem, é exibir o tamanho alocado e o UUID que foi montado.
no label, UUID=30572f65-706b-43c2-8a87-35cf8b308e82
Após montado podemos habilitar o Swap, para isto execute o comando abaixo:
Você pode usar os comandos swapon/swapoff para habilitar/desabilitar a memória Swap.
Agora podemos usar os comandos swapon -s e free -m para verificar se o Swap está habilitado.
Swap permanente
Para que o Swap seja permanente, ou seja, não se perca no reboot, devemos alterar o fstab. Abra o arquivo /etc/fstab com o seu editor preferido, no meu caso vou usar o VIM:
E vamos adicionar a seguinte linha no fim do arquivo:
Turbinando o Swap
O parâmetro swappiness define com que frequência o sistema manda dados ao Swap, e seu valor vai de 0 a 100. Quanto mais próximo a 100, mais Swap irá usar, garantindo mais mémoria livre. Como Swap é mais lento, vamos fazer com que use a memória o máximo do tempo ao invéz de Swap.