Português do Brasil English
Devin no Facebook  Devin no Twitter  RSS do Site 
Linux    

O que diabos é o swap no Linux?


Comentários  13
Visualizações  
688.509

No Linux, o swap é a memória virtual (também é conhecido como área de troca). A memória virtual funciona como uma extensão da memória RAM, que fica armazenada no disco. O porquê da memória swap precisar existir é simples: o sistema operacional precisa de memória para funcionar, e se a memória acabar, o sistema falha. O swap fica como uma reserva emergencial caso a memória RAM acabe. A memória swap era bastante útil em tempos passados onde memória RAM era algo mais escasso. Hoje em dia, tanto a RAM quanto espaço em disco estão baratos. É sempre recomendado utilizar swap, mesmo com muita memória RAM.

O swap pode ficar tanto em uma partição, quanto em um arquivo no disco. No caso de ficar numa partição em um disco comum (não-SSD), recomenda-se colocar a partição no início do disco, assim a leitura durante a rotação do disco magnético é mais rápida. No caso de partições em disco SSD, tanto faz pois não há rotações como um disco comum. Algumas distribuições, como Debian e Ubuntu, tem no instalador uma opção para colocar a partição no início do disco.

Importante: lembre-se que o swap é bem mais lento que a memória RAM. Se você colocar swap demais num sistema e começar a usá-lo muito você vai ganhar uma grande de uma lentidão! (muita lentidão em discos convencionais e mesmo assim lentidão em discos SSD)

Que tamanho usar?

Desde os primórdios dos tempos, e você ainda vai encontrar muito essa informação, recomendava-se colocar sempre o dobro da RAM como swap. Por exemplo: se uma máquina tem 1GB de RAM, coloca-se 2GB de swap. Mas esse tipo de conselho era mais comum quando as máquinas tinham pouco de RAM. Se um servidor tem 16GB, geralmente não é necessário você colocar 32GB de swap.

Essa regra do dobro foi alterada mais recentemente. Se a máquina tem até 2GB de RAM, coloque o dobro. A partir daí, cada GB adicional de RAM é apenas RAM+2GB na swap. Ou seja:

  • Um sistema de 2GB de RAM teria 4GB de swap (2×2).
  • Um sistema de 3GB de RAM teria 5GB de swap (3+2).
  • Um sistema de 8GB de RAM teria 10GB de swap (8+2).
  • Um sistema de 16GB de RAM teria 18GB de swap (16+2).
NOTA
NOTA

Essa sugestão de tamanho de swap não é regra e não precisa ser seguida à risca. Eu particularmente costumo dizer e recomendar como base 4 a 6GB de swap em qualquer tipo de máquina ou servidor. Eu costumo dizer que se você está usando swap demais (mais que 6GB!) é porque isso é um problema e deve ser resolvido colocando mais memória RAM ou escalando horizontalmente os serviços que gastam muita memória. Lembre-se: swap deve ser usado sempre como reserva. Determine o quanto de swap você precisa de acordo com a carga do seu sistema.

Como identificar o swap (e quanto estamos usando)

Há diversas maneiras de você identificar o swap de um sistema.

$ cat /proc/swaps 
Filename                                Type            Size    Used    Priority
/dev/sda2                               partition       2048276 112     -1

Que significa um swap do tipo partição, no /dev/sda2, com tamanho de 2GB (usando apenas 112KB).

  • Com o comando swapon -s (que é o mesmo que ver o arquivo do proc):
$ swapon -s
Filename                                Type            Size    Used    Priority
/var/swapfile.img                       file            2097144 5256    -1

Que significa um swap do tipo arquivo, no /var/swapfile.img, com tamanho de 2GB (usando 5MB).

$ free
             total       used       free     shared    buffers     cached
Mem:       5986512    3210580    2775932          0      80016    1043436
-/+ buffers/cache:    2087128    3899384
Swap:      5996540          0    5996540

$ free -m
             total       used       free     shared    buffers     cached
Mem:          5846       3113       2732          0         78        997
-/+ buffers/cache:       2038       3808
Swap:         5855          0       5855

Na última linha do comando, temos uns 6GB alocados e nada usado.

  • Com o comando vmstat:
$ vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  1   8392  20800    268  15568    0    2   136   309   50  137  2  2 95  1
 1  1   8492 118864    268  14680    0  100   768   100  374  300 42 58  0  0
 1  1   8616  27064    164  13628    0  124   640   124  344  311 44 56  0  0
 1  0   9020  79260    164  12396    0  404   768   404  363  332 49 51  0  0
 1  1   9464  89268    164  11328    0  444   640   444  387  320 41 59  0  0

A coluna swpd mostra quanto de swap foi alocado (foi até 9.5MB).
A coluna so mostra quanto de espaço foi alocado no swap (até 444KB).
A coluna si mostra o quanto foi liberado do swap (no exemplo, nada foi liberado: 0KB).

Usando o swap em um arquivo

Às vezes é necessário expandir o swap sem ter que mexer nas partições ou para uso temporário. Para estes casos, podemos criar um arquivo comum no sistema de arquivos e torná-lo swap. É um pouco pior que direto na partição pois tem um pequeno overhead do sistema de arquivos, mas funciona muito bem.

Primeiro crie um arquivo preenchido com zeros do tamanho que você quer com o dd:

dd if=/dev/zero of=/swapfile.img bs=1M count=2000

Esse comando irá criar o arquivo /swapfile.img com 2GB (1M x 2000).

Agora crie a área de swap no arquivo:

mkswap /swapfile.img
NOTA
NOTA

O mkswap é quem define que um arquivo ou partição é uma área de swap. E sim, você pode usar o mkswap para criar o swap em uma partição também. Pode também usar o swapon, o swapoff, e por aí vai…

Depois é só ativar com o comando swapon:

swapon /swapfile.img

Veja se ativou:

$ swapon -s
Filename                                Type            Size    Used    Priority
/swapfile.img                           file            2097144 5256    -1

Se quiser que o swap seja ativado toda vez na inicialização, insira a linha no /etc/fstab:

/swapfile.img     swap     swap    defaults        0 0

E finalmente, se você quiser desativar o swap do seu sistema (útil para forçar desalocar tudo do swap):

swapoff /swapfile.img

Ativando ou desativando todos os swaps

É possível carregar múltiplos arquivos e/ou partições como swap.

Você pode ativar com swapon:

swapon <dispositivo ou arquivo>

E desativar com o swapoff:

swapoff <dispositivo ou arquivo>

Você pode configurar o /etc/fstab com as definições de swap com uma linha como esta:

<dispositivo ou arquivo>     swap     swap    defaults        0 0

E com essas linhas configuradas, pode usar o parâmetro -a no swapon ou swapoff:

# ativa todos os swaps configurados no fstab
swapon -a

# desativa todos os swaps do sistema
swapoff -a

Usando o swappiness – ou como fazer com que o kernel use menos o swap

O swappiness é um parâmetro de kernel que configura o quão frequente deve-se usar a memória swap. Em instalações padrões, o swappiness é geralmente é 60 ou 80, o que indica 60% ou 80% de probabilidade do kernel usar o swap. Esse valor vai de 0 (nunca usar swap, ao menos que o sistema vá falhar) e 100 (usar swap agressivamente, toda vez que puder).

Em outras palavras, se você quer evitar que os programas e serviços usem swap demais, pode diminuir o valor do swappiness. Mas é bom manter o swap ativado para caso ocorra alguma falha desgraçada.

Para configurar o swappiness, basta editar um arquivo no proc.

Por exemplo, configurar o swappiness para 20:

echo 20 > /proc/sys/vm/swappiness

Ou até mesmo para 0:

echo 0 > /proc/sys/vm/swappiness

E se você quiser que isso persiste depois de reiniciar a máquina, coloque a seguinte linha no /etc/sysctl.conf:

vm.swappiness=20

(O comando sysctl -p também pode carregar as configurações deste arquivo para kernel imediatamente).

Referências

688.509

Comentários  13
Visualizações  
688.509


TagsLeia também

Apaixonado por Linux e administração de sistemas. Viciado em Internet, servidores, e em passar conhecimento. Idealizador do Devin, tem como meta aprender e ensinar muito Linux, o que ele vem fazendo desde 1997 :-)


Leia também



Comentários

13 respostas para “O que diabos é o swap no Linux?”

  1. Rafael Caobianco disse:

    Amigo bom dia,

    Excelente texto, parabéns!

    Abs,

  2. Wesley Espala Simões disse:

    Excelente post Hugo.
    Atenção somente, para o segundo título:

    "Com o comando swapon:"
    O que está mencionado abaixo, está duplicado com o primeiro.
    Onde creio que seja "swapon -s".

  3. […] O que diabos é o swap no Linux? […]

  4. Frank disse:

    Obrigado, Hugo!
    Excelente!

    vlw

  5. Italo L. disse:

    Muito bom amigo, ajudou bastante !

  6. narviksw disse:

    Bom dia,

    Possuo maquinas Linux Debian na minha rede que se autenticam no AD ( uso o CID ).
    Os usuarios logam-se perfeitamente, mas preciso utilizar uma maneira de montar a pasta de cada pessoa que se logar automaticamente:

    No exemplo abaixo eu fiz manualmente e funcionou.

    //192.168.x.x/home_drive/usuario1 /home/usuario1 cifs users,credentials=/usr/lib/cid/control/.key_netlogon,file_mode=0775,dir_mode=0775,iocharset=utf8,mapchars,nocase,soft 0 0

    Preciso adicionar esta linha no fstab, mas usar uma variável que detecte o nome da pessoa que se logar na maquina e montar a pasta desejada.
    Ou seja, substituir usuario1 pelo nome de quem estará logando-se atualmente.

    Ta difícil, alguém pode me ajudar nessa ?

    Grato pela atenção de todos.

  7. leonardo machado disse:

    Obrigado! Ajudou muito. Valeu!

  8. Jose Silva disse:

    Parabéns pelo trabalho desenvolvido e partilhado aqui.

    JSilva

  9. marcos coutinho disse:

    to com uma duvida imensa sem saber o que fazer, porque sou um pouco leigo em disco rigido,tenho um pc com hd 320 que tinha uma programa linux instalado nao sei como acabei deletando apartiçao toda fez que ia instalar o disco restaure o programa nao instala afirmando faltar alguns arquivos ou coisa assim!!
    Depois desse evento instalei o windons sevem pra instalar o testdis seguir o procedimento como em uns dos blog que escreve e apareceu a seguinte informaçao * partiçao linux e em baixo p linux swap em verde queria saber qual escolher ????

    *partição linux
    p partiçao linux swap

    e embaixo algumas opçoes como p primaria logica t correçao alguma coisas assim??

    outra coisa antes so aparecia partiçao linux mais depois que usei o procedimento de write sobre a partiçao, ela veio apagou o seven, ai fui instalar o seven de novo, tive de exclui, ai depois apareceu essa partiçao linux swap???

  10. Otavio STR disse:

    Muito prazer Hugo! Agora estou perdido. Nos comandos ver swap todos estão com Size=8GB Used=0, para o comando vmstat 1 5 a swap=0 si=0 so=0, livre 5,9 buffer=8,7kb, cache= 1Gb. Concluo que a Swap está parada (tambem no nomonitor do sistema) e só está funcionando cache e buffer…por isso estou notando que o notebook esta comedor de memória, lento, fechando janelas do nada e essas coisas. Pergunto e peço uma ajuda: Aswap está como partição e tenho um SSD de 120Gb com 8GB Ram. Que faço? Dou o comando mkswap nesta configuração para 10GB (8+2)? (postei no VivaOLinux a uns 3 dias e não tive nenhuma resposta.

  11. kazebre disse:

    Vei e lógico que a partição swap é apenas uma das opções de formatar a partição não particionada que vem no Linux para que seja usada como memoria temporária.
    exemplo

    hd 10 gb e tenho 1bg menoria ram conta fácil 1+1 =2gb na partição swap ai sobra 8gb na partição ext4
    há tenho 2 giga de ram 2+1 =3 gb na partição swap

    é so isso ! Instala essa porra !

  12. Léo disse:

    Muito obrigado, post excelente. Eu sou novo no mundo open source e me ajudou bastante.

Deixe um comentário

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