# Como adicionar espaço de swap no Ubuntu 20.04

Link: [https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-20-04-pt](https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-20-04-pt)

### [Introdução](https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-20-04-pt#introducao)

Um das maneiras de se proteger contra erros de memória insuficiente em aplicativos é através da adição de um espaço de swap ao seu servidor. Neste guia, falaremos sobre como adicionar um arquivo swap a um servidor Ubuntu 20.04.

**Aviso:** embora o swap seja geralmente recomendado para sistemas que utilizam discos rígidos tradicionais, o uso do swap em SSDs pode causar problemas de degradação de hardware ao longo do tempo. Por este motivo, não recomendamos a habilitação do swap na DigitalOcean ou em qualquer outro provedor que utilize armazenamento SSD.

## [O que é o Swap?](https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-20-04-pt#o-que-e-o-swap)

O *Swap* é uma parcela do armazenamento do disco rígido que foi reservada para o sistema operacional com o objetivo de armazenar temporariamente dados que ele não consegue mais reter na RAM. Isso permite que você aumente a quantidade de informações que seu servidor consegue manter em sua memória de trabalho, com algumas advertências. O espaço de swap no disco rígido será usado principalmente quando já não houver espaço suficiente em RAM para manter os dados do aplicativo em uso.

As informações gravadas no disco ficarão significativamente mais lentas do que as informações mantidas em RAM, mas o sistema operacional preferirá manter os dados do aplicativo em memória e usar o swap para os dados mais antigos. De maneira geral, ter espaço de swap como uma alternativa para quando a RAM do seu sistema estiver esgotada pode ser uma boa estratégia de segurança contra exceções de memória insuficiente nos sistemas com armazenamento disponível que não seja SSD.

## [Passo 1 – Verificando o Sistema em Relação às Informações de Swap (troca)](https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-20-04-pt#passo-1-verificando-o-sistema-em-relacao-as-informacoes-de-swap-troca)

Antes de começarmos, podemos verificar se o sistema já tem algum espaço de swap (troca) disponível. É possível ter vários arquivos de swap ou partições de swap, mas geralmente um deve ser o suficiente.

Podemos descobrir se o sistema tem algum swap configurado digitando:

<div class="code-label" id="bkmrk-" style="text-align: justify;" title="">  
</div>```
```

<div class="code-toolbar" id="bkmrk-sudo-swapon---show" style="text-align: justify;">1. <span class="token function">sudo</span> <span class="token function">swapon</span> <span class="token parameter variable">--show</span>

</div>```
```

<div class="code-toolbar" id="bkmrk-copy" style="text-align: justify;"><div class="toolbar"><div class="toolbar-item"><button>Copy</button></div></div></div>Se você não receber nenhum resultado, isso significa que seu sistema não tem espaço de swap disponível atualmente.

Você pode verificar se não existe um swap ativo usando o utilitário `free`:

<div class="code-label" id="bkmrk--3" style="text-align: justify;" title="">  
</div>```
```

<div class="code-toolbar" id="bkmrk-free--h" style="text-align: justify;">1. <span class="token function">free</span> <span class="token parameter variable">-h</span>

</div>```
```

<div class="code-toolbar" id="bkmrk-copy-1" style="text-align: justify;"><div class="toolbar"><div class="toolbar-item"><button>Copy</button></div></div></div><div class="code-label" id="bkmrk--6" style="text-align: justify;" title="">  
</div>```
```

<div class="secondary-code-label" id="bkmrk-output" style="text-align: justify;" title="Output">Output</div>```
              total        used        free      shared  buff/cache   available
Mem:          981Mi       122Mi       647Mi       0.0Ki       211Mi       714Mi
<mark>Swap:            0B          0B          0B</mark>

```

Como você pode ver na linha **Swap** do resultado, nenhum swap está ativo no sistema.

## [Passo 2 – Verificando o Espaço Disponível na Partição do Disco Rígido](https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-20-04-pt#passo-2-verificando-o-espaco-disponivel-na-particao-do-disco-rigido)

Antes de criarmos nosso arquivo de swap, verificaremos o uso atual do disco para garantir que temos espaço suficiente. Faça isso digitando:

<div class="code-label" id="bkmrk--8" style="text-align: justify;" title="">  
</div>```
```

<div class="code-toolbar" id="bkmrk-df--h" style="text-align: justify;">1. <span class="token function">df</span> <span class="token parameter variable">-h</span>

</div>```
```

<div class="code-toolbar" id="bkmrk-copy-2" style="text-align: justify;"><div class="toolbar"><div class="toolbar-item"><button>Copy</button></div></div></div><div class="code-label" id="bkmrk--11" style="text-align: justify;" title="">  
</div>```
```

<div class="secondary-code-label" id="bkmrk-output-1" style="text-align: justify;" title="Output">Output</div>```
Filesystem      Size  Used Avail Use% Mounted on
udev            474M     0  474M   0% /dev
tmpfs            99M  932K   98M   1% /run
<mark>/dev/vda1        25G  1.4G   23G   7% /</mark>
tmpfs           491M     0  491M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           491M     0  491M   0% /sys/fs/cgroup
/dev/vda15      105M  3.9M  101M   4% /boot/efi
/dev/loop0       55M   55M     0 100% /snap/core18/1705
/dev/loop1       69M   69M     0 100% /snap/lxd/14804
/dev/loop2       28M   28M     0 100% /snap/snapd/7264
tmpfs            99M     0   99M   0% /run/user/1000

```

O dispositivo com `/` na coluna `Mounted on` é o nosso disco neste caso. Temos bastante espaço disponível neste exemplo (apenas 1,4 GB usado). Seu uso provavelmente será diferente.

Apesar da divergência de opiniões quanto ao tamanho adequado de um espaço de swap, isso realmente dependerá de suas preferências pessoais e das exigências da sua aplicação. Geralmente, um espaço igual ou duas vezes o tamanho do espaço da RAM no seu sistema é um bom ponto de partida. Outra boa regra de ouro é que qualquer coisa acima de 4 GB de swap é provavelmente desnecessária se você somente estiver usando-o como uma alternativa para a RAM.

## [Passo 3 – Criando um Arquivo de Swap](https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-20-04-pt#passo-3-criando-um-arquivo-de-swap)

Agora que sabemos qual é o espaço disponível em nosso disco rígido, podemos criar um arquivo de swap no nosso sistema de arquivos. Alocaremos um arquivo do tamanho que queremos que o swap tenha chamado de `swapfile` em nosso diretório raiz (`/`).

A melhor maneira de criar um arquivo de swap é com o programa `fallocate`. Este comando cria instantaneamente um arquivo do tamanho especificado.

Uma vez que o servidor no nosso exemplo tem 1 GB de RAM, criaremos um arquivo de 1 GB neste guia. Ajuste isso para atender às necessidades do seu próprio servidor:

<div class="code-label" id="bkmrk--13" style="text-align: justify;" title="">  
</div>```
```

<div class="code-toolbar" id="bkmrk-sudo-fallocate--l-1g" style="text-align: justify;">1. <span class="token function">sudo</span> fallocate <span class="token parameter variable">-l</span> <mark>1G</mark> /swapfile

</div>```
```

<div class="code-toolbar" id="bkmrk-copy-3" style="text-align: justify;"><div class="toolbar"><div class="toolbar-item"><button>Copy</button></div></div></div>Podemos verificar se a quantidade correta de espaço foi reservada digitando:

<div class="code-label" id="bkmrk--16" style="text-align: justify;" title="">  
</div>```
```

<div class="code-toolbar" id="bkmrk-ls--lh-%2Fswapfile" style="text-align: justify;">1. <span class="token function">ls</span> <span class="token parameter variable">-lh</span> /swapfile

</div>```
```

<div class="code-toolbar" id="bkmrk-copy-4" style="text-align: justify;"><div class="toolbar"><div class="toolbar-item"><button>Copy</button></div></div></div><div class="code-label" id="bkmrk--19" style="text-align: justify;" title="">  
</div>```
```

<div class="code-toolbar" id="bkmrk--rw-r--r---1-root-ro" style="text-align: justify;">1. -rw-r--r-- <span class="token number">1</span> root root <span class="token number">1</span>.0G Apr <span class="token number">25</span> <span class="token number">11</span>:14 /swapfile

</div>```
```

<div class="code-toolbar" id="bkmrk-copy-5" style="text-align: justify;"><div class="toolbar"><div class="toolbar-item"><button>Copy</button></div></div></div>Nosso arquivo foi criado com a quantidade correta do espaço reservado.

## [Passo 4 – Habilitando o Arquivo de Swap](https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-20-04-pt#passo-4-habilitando-o-arquivo-de-swap)

Agora que temos um arquivo do tamanho correto disponível, precisamos realmente transformar isso em espaço de swap.

Primeiro, precisamos bloquear as permissões do arquivo para que apenas os usuários com privilégios **root** possam ler o conteúdo. Isso impede que os usuários normais possam acessar o arquivo, o que teria implicações de segurança significativas.

Torne o arquivo acessível somente para **root** digitando:

<div class="code-label" id="bkmrk--22" style="text-align: justify;" title="">  
</div>```
```

<div class="code-toolbar" id="bkmrk-sudo-chmod-600-%2Fswap" style="text-align: justify;">1. <span class="token function">sudo</span> <span class="token function">chmod</span> <span class="token number">600</span> /swapfile

</div>```
```

<div class="code-toolbar" id="bkmrk-copy-6" style="text-align: justify;"><div class="toolbar"><div class="toolbar-item"><button>Copy</button></div></div></div>Verifique a alteração de permissões digitando:

<div class="code-label" id="bkmrk--25" style="text-align: justify;" title="">  
</div>```
```

<div class="code-toolbar" id="bkmrk-ls--lh-%2Fswapfile-1" style="text-align: justify;">1. <span class="token function">ls</span> <span class="token parameter variable">-lh</span> /swapfile

</div>```
```

<div class="code-toolbar" id="bkmrk-copy-7" style="text-align: justify;"><div class="toolbar"><div class="toolbar-item"><button>Copy</button></div></div></div><div class="code-label" id="bkmrk--28" style="text-align: justify;" title="">  
</div>```
```

<div class="secondary-code-label" id="bkmrk-output-2" style="text-align: justify;" title="Output">Output</div>```
<mark>-rw-------</mark> 1 root root 1.0G Apr 25 11:14 /swapfile

```

Como você pode ver, apenas o usuário **root** tem os sinalizadores de leitura e gravação habilitados.

Podemos agora marcar o arquivo como espaço de swap digitando:

<div class="code-label" id="bkmrk--30" style="text-align: justify;" title="">  
</div>```
```

<div class="code-toolbar" id="bkmrk-sudo-mkswap-%2Fswapfil" style="text-align: justify;">1. <span class="token function">sudo</span> <span class="token function">mkswap</span> /swapfile

</div>```
```

<div class="code-toolbar" id="bkmrk-copy-8" style="text-align: justify;"><div class="toolbar"><div class="toolbar-item"><button>Copy</button></div></div></div><div class="code-label" id="bkmrk--33" style="text-align: justify;" title="">  
</div>```
```

<div class="secondary-code-label" id="bkmrk-output-3" style="text-align: justify;" title="Output">Output</div>```
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf

```

Após marcar o arquivo, podemos habilitar o arquivo de swap, permitindo que nosso sistema comece a utilizá-lo:

<div class="code-label" id="bkmrk--35" style="text-align: justify;" title="">  
</div>```
```

<div class="code-toolbar" id="bkmrk-sudo-swapon-%2Fswapfil" style="text-align: justify;">1. <span class="token function">sudo</span> <span class="token function">swapon</span> /swapfile

</div>```
```

<div class="code-toolbar" id="bkmrk-copy-9" style="text-align: justify;"><div class="toolbar"><div class="toolbar-item"><button>Copy</button></div></div></div>Verifique se o swap está disponível digitando:

<div class="code-label" id="bkmrk--38" style="text-align: justify;" title="">  
</div>```
```

<div class="code-toolbar" id="bkmrk-sudo-swapon---show-1" style="text-align: justify;">1. <span class="token function">sudo</span> <span class="token function">swapon</span> <span class="token parameter variable">--show</span>

</div>```
```

<div class="code-toolbar" id="bkmrk-copy-10" style="text-align: justify;"><div class="toolbar"><div class="toolbar-item"><button>Copy</button></div></div></div><div class="code-label" id="bkmrk--41" style="text-align: justify;" title="">  
</div>```
```

<div class="secondary-code-label" id="bkmrk-output-4" style="text-align: justify;" title="Output">Output</div>```
NAME      TYPE  SIZE USED PRIO
/swapfile file 1024M   0B   -2

```

Podemos verificar a saída do utilitário `free` novamente para corroborar nossos resultados:

<div class="code-label" id="bkmrk--43" style="text-align: justify;" title="">  
</div>```
```

<div class="code-toolbar" id="bkmrk-free--h-1" style="text-align: justify;">1. <span class="token function">free</span> <span class="token parameter variable">-h</span>

</div>```
```

<div class="code-toolbar" id="bkmrk-copy-11" style="text-align: justify;"><div class="toolbar"><div class="toolbar-item"><button>Copy</button></div></div></div><div class="code-label" id="bkmrk--46" style="text-align: justify;" title="">  
</div>```
```

<div class="secondary-code-label" id="bkmrk-output-5" style="text-align: justify;" title="Output">Output</div>```
              total        used        free      shared  buff/cache   available
Mem:          981Mi       123Mi       644Mi       0.0Ki       213Mi       714Mi
<mark>Swap:         1.0Gi          0B       1.0Gi</mark>

```

Nosso swap foi configurado com sucesso e nosso sistema operacional começará a usá-lo conforme necessário.

## [Passo 5 – Tornando o Arquivo de Swap Permanente](https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-20-04-pt#passo-5-tornando-o-arquivo-de-swap-permanente)

Nossas alterações recentes habilitaram o arquivo de swap para a sessão atual. No entanto, se reiniciarmos, o servidor não manterá as configurações de swap automaticamente. Podemos alterar isso adicionando o arquivo de swap ao nosso arquivo `/etc/fstab`.

Faça um backup do arquivo `/etc/fstab` para o caso de algo dar errado:

<div class="code-label" id="bkmrk--48" style="text-align: justify;" title="">  
</div>```
```

<div class="code-toolbar" id="bkmrk-sudo-cp-%2Fetc%2Ffstab-%2F" style="text-align: justify;">1. <span class="token function">sudo</span> <span class="token function">cp</span> /etc/fstab /etc/fstab.bak

</div>```
```

<div class="code-toolbar" id="bkmrk-copy-12" style="text-align: justify;"><div class="toolbar"><div class="toolbar-item"><button>Copy</button></div></div></div>Adicione a informação do arquivo de swap no final do seu arquivo `/etc/fstab` digitando:

<div class="code-label" id="bkmrk--51" style="text-align: justify;" title="">  
</div>```
```

<div class="code-toolbar" id="bkmrk-echo-%27%2Fswapfile-none" style="text-align: justify;">1. <span class="token builtin class-name">echo</span> <span class="token string">'/swapfile none swap sw 0 0'</span> <span class="token operator">|</span> <span class="token function">sudo</span> <span class="token function">tee</span> <span class="token parameter variable">-a</span> /etc/fstab

</div>```
```

<div class="code-toolbar" id="bkmrk-copy-13" style="text-align: justify;"><div class="toolbar"><div class="toolbar-item"><button>Copy</button></div></div></div>Em seguida, avaliaremos algumas configurações que podemos atualizar para ajustar nosso espaço de swap.

## [Passo 6 – Ajustando as Configurações de Swap](https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-20-04-pt#passo-6-ajustando-as-configuracoes-de-swap)

Há algumas opções que você pode configurar que terão um impacto no desempenho do seu sistema quando estiver lidando com o swap.

### [Ajustando a propriedade Swappiness](https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-20-04-pt#ajustando-a-propriedade-swappiness)

O parâmetro `swappiness` configura a frequência com que o seu sistema transfere dados da RAM para o espaço de swap. Esse é um valor entre 0 e 100 que representa uma porcentagem.

Com valores próximos de zero, o kernel não irá transferir dados para o disco a menos que seja absolutamente necessário. Lembre-se, as interações com o arquivo de swap são “dispendiosas”, no sentido de que demoram mais que as interações com a RAM e podem causar uma redução significativa no desempenho. Dizer ao sistema para não depender tanto do swap irá geralmente tornar o seu sistema mais rápido.

Valores que estão mais próximos de 100 irão tentar colocar mais dados no swap em um esforço para manter mais espaço da RAM livre. Dependendo do perfil de memória de seus aplicativos ou do motivo pelo qual você está usando o seu servidor, isso pode ser melhor em alguns casos.

Podemos ver o valor atual do parâmetro swappiness digitando:

<div class="code-label" id="bkmrk--54" style="text-align: justify;" title="">  
</div>```
```

<div class="code-toolbar" id="bkmrk-cat-%2Fproc%2Fsys%2Fvm%2Fswa" style="text-align: justify;">1. <span class="token function">cat</span> /proc/sys/vm/swappiness

</div>```
```

<div class="code-toolbar" id="bkmrk-copy-14" style="text-align: justify;"><div class="toolbar"><div class="toolbar-item"><button>Copy</button></div></div></div><div class="code-label" id="bkmrk--57" style="text-align: justify;" title="">  
</div>```
```

<div class="secondary-code-label" id="bkmrk-output-6" style="text-align: justify;" title="Output">Output</div>```
60

```

Para um desktop, um valor de swappiness de 60 não é um valor ruim. Para um servidor, você pode deixá-lo mais próximo de 0.

Podemos definir o parâmetro swappiness para um valor diferente usando o comando `sysctl`.

Por exemplo, para definir o valor do parâmetro swappiness em 10, poderíamos digitar:

<div class="code-label" id="bkmrk--59" style="text-align: justify;" title="">  
</div>```
```

<div class="code-toolbar" id="bkmrk-sudo-sysctl-vm.swapp" style="text-align: justify;">1. <span class="token function">sudo</span> <span class="token function">sysctl</span> <span class="token assign-left variable">vm.swappiness</span><span class="token operator">=</span><span class="token number">10</span>

</div>```
```

<div class="code-toolbar" id="bkmrk-copy-15" style="text-align: justify;"><div class="toolbar"><div class="toolbar-item"><button>Copy</button></div></div></div><div class="code-label" id="bkmrk--62" style="text-align: justify;" title="">  
</div>```
```

<div class="secondary-code-label" id="bkmrk-output-7" style="text-align: justify;" title="Output">Output</div>```
vm.swappiness = 10

```

Este valor persistirá até a próxima reinicialização. Podemos definir este valor automaticamente na reinicialização, adicionando a linha no nosso arquivo `/etc/sysctl.conf`:

<div class="code-label" id="bkmrk--64" style="text-align: justify;" title="">  
</div>```
```

<div class="code-toolbar" id="bkmrk-sudo-nano-%2Fetc%2Fsysct" style="text-align: justify;">1. <span class="token function">sudo</span> <span class="token function">nano</span> /etc/sysctl.conf

</div>```
```

<div class="code-toolbar" id="bkmrk-copy-16" style="text-align: justify;"><div class="toolbar"><div class="toolbar-item"><button>Copy</button></div></div></div>No final, você pode adicionar:

<div class="code-label" id="bkmrk-%2Fetc%2Fsysctl.conf" style="text-align: justify;" title="/etc/sysctl.conf">/etc/sysctl.conf</div>```
vm.swappiness=10

```

Salve e feche o arquivo quando você terminar.

### [Ajustando a Configuração da Pressão por Cache](https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-20-04-pt#ajustando-a-configuracao-da-pressao-por-cache)

Outro valor relacionado que você pode querer modificar é o `vfs_cache_pressure`. Este ajuste configura o quanto o sistema escolherá para as informações cache dos objetos *inode* e *dentry* em detrimento de outros dados.

Basicamente, tratam-se de dados de acesso sobre o sistema de arquivos. De maneira geral, isso é difícil de consultar e, com frequência, muito solicitado. Assim, é algo muito bom que o seu sistema armazene dados em cache. Você pode ver o valor atual questionando o sistema de arquivos `proc` novamente:

<div class="code-label" id="bkmrk--67" style="text-align: justify;" title="">  
</div>```
```

<div class="code-toolbar" id="bkmrk-cat-%2Fproc%2Fsys%2Fvm%2Fvfs" style="text-align: justify;">1. <span class="token function">cat</span> /proc/sys/vm/vfs\_cache\_pressure

</div>```
```

<div class="code-toolbar" id="bkmrk-copy-17" style="text-align: justify;"><div class="toolbar"><div class="toolbar-item"><button>Copy</button></div></div></div><div class="code-label" id="bkmrk--70" style="text-align: justify;" title="">  
</div>```
```

<div class="secondary-code-label" id="bkmrk-output-8" style="text-align: justify;" title="Output">Output</div>```
100

```

Uma vez que ele está atualmente configurado, o nosso sistema remove as informações de inode do cache muito rapidamente. Podemos definir isso em um valor mais conservador como 50, digitando:

<div class="code-label" id="bkmrk--72" style="text-align: justify;" title="">  
</div>```
```

<div class="code-toolbar" id="bkmrk-sudo-sysctl-vm.vfs_c" style="text-align: justify;">1. <span class="token function">sudo</span> <span class="token function">sysctl</span> <span class="token assign-left variable">vm.vfs\_cache\_pressure</span><span class="token operator">=</span><span class="token number">50</span>

</div>```
```

<div class="code-toolbar" id="bkmrk-copy-18" style="text-align: justify;"><div class="toolbar"><div class="toolbar-item"><button>Copy</button></div></div></div><div class="code-label" id="bkmrk--75" style="text-align: justify;" title="">  
</div>```
```

<div class="secondary-code-label" id="bkmrk-output-9" style="text-align: justify;" title="Output">Output</div>```
vm.vfs_cache_pressure = 50

```

Novamente, isso é apenas válido para a nossa sessão atual. Podemos alterar esse valor, adicionando-o ao nosso arquivo de configuração como fizemos com a nossa configuração do parâmetro swappiness:

<div class="code-label" id="bkmrk--77" style="text-align: justify;" title="">  
</div>```
```

<div class="code-toolbar" id="bkmrk-sudo-nano-%2Fetc%2Fsysct-1" style="text-align: justify;">1. <span class="token function">sudo</span> <span class="token function">nano</span> /etc/sysctl.conf

</div>```
```

<div class="code-toolbar" id="bkmrk-copy-19" style="text-align: justify;"><div class="toolbar"><div class="toolbar-item"><button>Copy</button></div></div></div>No final, adicione a linha que especifica o seu novo valor:

<div class="code-label" id="bkmrk-%2Fetc%2Fsysctl.conf-1" style="text-align: justify;" title="/etc/sysctl.conf">/etc/sysctl.conf</div>```
vm.vfs_cache_pressure=50

```

Salve e feche o arquivo quando você terminar.

## [Conclusão](https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-20-04-pt#conclusao)

Seguir as etapas deste guia lhe dará algum espaço para respirar em casos que de outra forma conduziriam a exceções de falta de memória. O espaço de swap pode ser incrivelmente útil para evitar alguns desses problemas comuns.

Se você está encontrando erros de OOM (out of memory - falta de memória), ou se você descobrir que o seu sistema não consegue usar os aplicativos de que você precisa, a melhor solução é otimizar as configurações do seu aplicativo ou atualizar o seu servidor.