AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 1357
Accepted
jfoucher
jfoucher
Asked: 2010-08-06 22:43:23 +0800 CST2010-08-06 22:43:23 +0800 CST 2010-08-06 22:43:23 +0800 CST

Como esvaziar a troca se houver RAM livre?

  • 772

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?

performance swap ram-usage
  • 7 7 respostas
  • 589594 Views

7 respostas

  • Voted
  1. SpamapS
    2010-08-06T22:47:50+08:002010-08-06T22:47:50+08:00

    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

    sudo swapoff -a
    sudo swapon -a
    

    OU alternativamente como uma única linha

    sudo swapoff -a; sudo swapon -a
    

    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 swapoffpode demorar um pouco. Isso é particularmente verdadeiro se você tiver muitas trocas a serem trocadas.

    • 637
  2. Best Answer
    popey
    2010-08-07T02:04:59+08:002010-08-07T02:04:59+08:00

    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 vmstatcomando. Deixe-o funcionando por alguns segundos para se acalmar e observe as sicolunas (swapin) e so(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.

    procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
     0  0  78588 230788   9596  72196    0    0     0     0  543  652 12  6 78  0
     0  0  78588 230780   9596  72196    0    0     0     0  531  410  1  0 99  0
     0  0  78588 230796   9596  72196    0    0     0     0  300  335  1  1 97  0
     1  0  78588 230788   9608  72224    0    0    40     0  737  762  4  4 84  8
     5  0  78588 230788   9608  72224    0    0     0     0  415  385  9  3 84  0
     0  0  78588 230540   9616  72224    0    0     0    44  611  556 55  5 31  0
     0  0  78588 230532   9616  72224    0    0     0     0  574  662  1  6 89  0
    

    No entanto, aqui topvocê pode ver que tenho espaço de troca alocado: -

    Mem:    475236k total,   245076k used,   230160k free,     9720k buffers
    Swap:   491512k total,    78588k used,   412924k free,    72476k cached
    
    • 214
  3. Elijah Lynn
    2012-06-12T06:10:25+08:002012-06-12T06:10:25+08:00

    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 :

    A configuração padrão no Ubuntu é swappiness=60. Reduzir o valor padrão de swappiness provavelmente melhorará o desempenho geral de uma instalação típica de desktop Ubuntu. Um valor de swappiness=10 é recomendado , mas sinta-se à vontade para experimentar.

    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 :

    O parâmetro swappiness controla a tendência do kernel de mover processos para fora da memória física e para o disco swap. Como os discos são muito mais lentos que a RAM, isso pode levar a tempos de resposta mais lentos para o sistema e os aplicativos se os processos forem movidos de forma muito agressiva para fora da memória.

    1. swappiness pode ter um valor entre 0 e 100
    2. swappiness=0 diz ao kernel para evitar a troca de processos fora da memória física pelo maior tempo possível
    3. swappiness=100 diz ao kernel para trocar agressivamente os processos da memória física e movê-los para o cache de troca

    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:

    cat /proc/sys/vm/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.

    sudo swapoff --all
    

    Para definir o novo valor como 0:

    sudo sysctl vm.swappiness=0 
    

    Para ativar a troca novamente:

    sudo swapon --all
    

    Para definir permanentemente o swappiness como 0:

    1. sudoedit /etc/sysctl.conf
    2. Adicionar esta linhavm.swappiness = 0
    3. 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/

    • 176
  4. Scott Severance
    2011-12-26T08:35:45+08:002011-12-26T08:35:45+08:00

    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_swapde que funcionou para mim nos últimos anos. Ele verifica se há RAM livre suficiente antes de desabilitar a troca. Aqui está:

    #!/bin/bash
    
    free_data="$(free)"
    mem_data="$(echo "$free_data" | grep 'Mem:')"
    free_mem="$(echo "$mem_data" | awk '{print $4}')"
    buffers="$(echo "$mem_data" | awk '{print $6}')"
    cache="$(echo "$mem_data" | awk '{print $7}')"
    total_free=$((free_mem + buffers + cache))
    used_swap="$(echo "$free_data" | grep 'Swap:' | awk '{print $3}')"
    
    echo -e "Free memory:\t$total_free kB ($((total_free / 1024)) MB)\nUsed swap:\t$used_swap kB ($((used_swap / 1024)) MB)"
    if [[ $used_swap -eq 0 ]]; then
        echo "Congratulations! No swap is in use."
    elif [[ $used_swap -lt $total_free ]]; then
        echo "Freeing swap..."
        sudo swapoff -a
        sudo swapon -a
    else
        echo "Not enough free memory. Exiting."
        exit 1
    fi
    
    • 57
  5. Erigami
    2010-08-07T08:34:51+08:002010-08-07T08:34:51+08:00

    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.

    • 26
  6. Omid Ghayour
    2022-05-07T08:48:43+08:002022-05-07T08:48:43+08:00

    Diga ao vm para não ser tão swappy, retomando o swappiness, por

    sudo sysctl vm.swappiness=10
    

    ou mesmo não ser swappy tanto quanto possível por

    sudo sysctl vm.swappiness=0
    

    Por favor, leia a documentação do swapfile aqui: https://help.ubuntu.com/community/SwapFaq

    • 0
  7. Amandasaurus
    2010-08-12T11:35:09+08:002010-08-12T11:35:09+08:00

    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.

    • -3

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como adicionar um diretório ao PATH?

    • 17 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Marko Smith

    Como faço para obter a temperatura da CPU?

    • 21 respostas
  • Marko Smith

    Como posso adicionar um usuário como um novo sudoer usando a linha de comando?

    • 7 respostas
  • Marko Smith

    Alterar permissões e propriedade da pasta

    • 9 respostas
  • Marko Smith

    Como você reinicia o Apache?

    • 13 respostas
  • Marko Smith

    Como posso desinstalar o software?

    • 11 respostas
  • Marko Smith

    Como os PPAs podem ser removidos?

    • 26 respostas
  • Martin Hope
    justingrif Como adicionar um diretório ao PATH? 2009-07-23 12:42:23 +0800 CST
  • Martin Hope
    NES Como habilitar ou desabilitar serviços? 2010-12-30 13:03:32 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    Olivier Lalonde Como manter os processos em execução após encerrar a sessão ssh? 2010-10-22 04:09:13 +0800 CST
  • Martin Hope
    David B Como posso adicionar um usuário como um novo sudoer usando a linha de comando? 2010-10-16 04:02:45 +0800 CST
  • Martin Hope
    Hans Como removo versões antigas do kernel para limpar o menu de inicialização? 2010-08-21 19:37:01 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve