Quando abro um aplicativo com uso intensivo de RAM (VirtualBox definido em 2 GB de RAM), geralmente é usado algum espaço de troca, dependendo do que mais estou aberto no momento.
No entanto, quando eu saio desse último aplicativo, os 2 GB de RAM são liberados, mas o mesmo uso do espaço de troca permanece.
Por exemplo, agora, cerca de duas horas depois de fechar o VirtualBox, tenho 1,6 GB de RAM livre e ainda 770 MB em troca.
Como posso dizer ao Ubuntu para parar de usar essa troca e voltar a usar a RAM?
O kernel do Linux subjacente ao Ubuntu "trocará" automaticamente essas páginas do disco para a RAM conforme necessário, então, em geral, eu diria que apenas deixe acontecer naturalmente.
No entanto, se você realmente sentir que precisa forçá-lo (posso ver um cenário em que você gostaria de saber se o sistema responderá mais tarde), poderá desativar e reativar momentaneamente a troca
OU alternativamente como uma única linha
Tenha cuidado ao fazer isso, pois você pode tornar seu sistema instável, especialmente se já estiver com pouca memória RAM. Certifique-se de ter RAM livre suficiente em seu sistema, ou você pode não conseguir liberar a troca e o OOM-Killer acabaria matando alguns de seus processos.
Observe que o
swapoff
pode demorar um pouco. Isso é particularmente verdadeiro se você tiver muitas trocas a serem trocadas.Só porque o swap está alocado, não significa que ele está sendo 'usado'. Embora programas como o monitor do sistema e o top mostrem parte do seu espaço de troca sendo alocado (no seu exemplo, 770 MB), isso não significa que o sistema está trocando ativamente de entrada/saída.
Para descobrir se algo está trocando de entrada/saída, você pode usar o
vmstat
comando. Deixe-o funcionando por alguns segundos para se acalmar e observe assi
colunas (swapin) eso
(swapout). Se nada está acontecendo, então não há razão para se preocupar.Aqui está a saída de running
vmstat 1
, onde você pode ver que minha máquina não está trocando.No entanto, aqui
top
você pode ver que tenho espaço de troca alocado: -Você também pode definir seu valor de "swappiness" do padrão de 60, desta forma a troca não crescerá tanto para começar. Por que o padrão de envio é definido como 60 quando o valor recomendado é 10 me deixa perplexo. Do Ubuntu SwapFAQ :
Ao alterar esse valor para 10 ou mesmo 0, você pode adicionar um aumento de velocidade significativo e perceptível a um sistema mais antigo com uma unidade lenta. Definir esse valor como 0 não desativa a troca para o kernel Linux 3.4 e inferior, mas com 3.5+, você deve usar um valor de 1 se quiser mantê-lo em sua configuração mais baixa*.
Não vejo razão para não definir isso como 0, pois qualquer coisa que atinja o disco é mais lenta que a RAM. Eu tenho 8 núcleos virtuais, um SSD rápido e 8 GB de memória e meu swap está definido como 0. Neste momento eu tenho 3 máquinas virtuais em execução, meu uso de memória é de 7,1 de 7,7 GB, meu swap usado é de apenas 576 KB de 952 MB e todos os sistemas estão funcionando sem problemas!
Do Ubuntu SwapFAQ :
Abaixo estão as instruções básicas para verificar o swappiness, esvaziando seu swap e alterando o swappiness para 0:
Para verificar o valor de swappiness:
Para definir temporariamente a troca para 0 ( conforme sugerido pelo SpamapS ):
Isso esvaziará sua troca e transferirá toda a troca de volta para a memória. Primeiro, certifique-se de ter memória suficiente disponível visualizando a guia de recursos do gnome-system-monitor, sua memória livre deve ser maior que a sua troca usada. Este processo pode demorar um pouco, use o gnome-system-monitor para monitorar e verificar o progresso.
Para definir o novo valor como 0:
Para ativar a troca novamente:
Para definir permanentemente o swappiness como 0:
sudoedit /etc/sysctl.conf
vm.swappiness = 0
sudo shutdown -r now
# reinicie o sistema* Com a versão do kernel 3.5+, a configuração de swappiness para 0 o desativa completamente e uma configuração de 1 é recomendada se você deseja o algoritmo de swappiness mais baixo. fonte: https://www.percona.com/blog/2014/04/28/oom-relation-vm-swappiness0-new-kernel/
Descobri que esvaziar o swap pode ajudar muito em sistemas com discos lentos e RAM limitada. Claro, como já mencionado, a maneira de fazer isso é executar
sudo swapoff -a; sudo swapon -a
. O problema aqui é que, se houver memória RAM insuficiente, isso causará todos os tipos de problemas.Eu escrevi um roteiro que eu chamo
toggle_swap
de que funcionou para mim nos últimos anos. Ele verifica se há RAM livre suficiente antes de desabilitar a troca. Aqui está:Depois de brincar com swappiness por alguns dias, cheguei à conclusão de que o kernel deveria ser deixado por conta própria. Ele sabe o que está fazendo e é otimizado para oferecer a melhor experiência.
A menos que você tenha uma boa razão para querer o disco de volta, eu o deixaria.
Diga ao vm para não ser tão swappy, retomando o swappiness, por
ou mesmo não ser swappy tanto quanto possível por
Por favor, leia a documentação do swapfile aqui: https://help.ubuntu.com/community/SwapFaq
Não afeta o desempenho se o seu espaço de troca estiver ocupado. A única penalidade de desempenho é que as coisas estão entrando / saindo da troca. Se nada estiver sendo trocado/trocado, então você não precisa se preocupar com nada.