Por anos, tenho tido o mesmo problema com minhas pequenas configurações do Ubuntu: o espaço de troca usado aumenta com o tempo. Tenho a impressão de que isso ocorre principalmente porque a memória alocada nunca retorna à RAM, embora exista espaço suficiente para ela, exceto no caso de uma ação do usuário, como desativar a troca.
Fiz um pequeno cron
comando para automatizar isso e tenho bons resultados:
#! /bin/sh
echo "* */1 * * * root swapoff -a && swapon -a" >> /etc/crontab
Mas como é mais um truque do que uma solução real para esse problema, estou me perguntando sobre os possíveis motivos pelos quais isso pode ser uma má idéia, ou como eu poderia melhorar esse script para torná-lo um pouco mais inteligente?
Respostas:
Usando assim: sim, ruim. Você realmente precisa verificar se há memória suficiente disponível antes de desativar a troca. Veja /ubuntu//a/90399/15811 para obter uma versão melhor.
Além disso: você tem certeza disso? Swap sendo alocado não significa swap sendo usado. O comando
vmstat
, colunassi
(troca) eso
(troca). Se esses permanecerem 0, você tem outro problema. Na minha experiência, a troca é pouco usada, e você pode não estar usando-o pensando que não o esvazia, mas não há nada a esvaziar.fonte
vmstat
.Eu diria que é uma má ideia. Se você acha que possui memória livre e um processo ativo não está sendo movido da troca para a RAM, então você não tem tanta memória livre quanto pensa ou o processo não é tão ativo quanto você pensa. é.
Se um processo ativo continuar sendo trocado, você deve corrigir o que estiver causando pressão na memória. Se não é um processo ativo, qual é o problema?
fonte
É uma má idéia.
O kernel começa a copiar (sem mover) dados para trocar muito antes que a memória física esteja quase cheia, porque se algum processo exigir muita memória, qualquer página que já tenha uma cópia válida em troca poderá ser reutilizada imediatamente sem exigir outra gravação para o disco.
Geralmente isso acontece principalmente em páginas que não são acessadas há muito tempo, o que é um bom indicador de que é improvável que elas sejam acessadas em breve.
Se você descartar explicitamente as cópias, isso não traz benefícios, porque os dados ainda existem na RAM, mas pode custar-lhe velocidade quando algum processo deseja alocar muita memória e a troca se torna necessária.
O kernel também sempre usará espaço de troca assim que a memória física estiver acima de 50%, portanto esses números serão diferentes de zero, mesmo se você tiver memória suficiente instalada.
fonte
/proc/sys/vm/swappiness
o valor padrão é deixado70
, o que é bom para servidores e pagina de maneira bastante agressiva páginas sujas de processos que não as tocam há um tempo para abrir espaço para mais pagecache. Isso geralmente é ruim para os desktops porque a tecla alt-tab pode ficar lenta.swappiness=70
), mas a latência é mais importante para a experiência do usuário em uma área de trabalho. É uma troca. Se você compilar rotineiramente coisas um pouco grandes demais para permanecer no pagecache, deixeswappiness
um pouco mais alto, como 20 ou 30 em vez de 5 ou 10. Consulte também akitaonrails.com/2017/01/17/optimizing-linux-for computadores lentos . Vervm.vfs_cache_pressure
abaixo de 100 também favorece o cache de metadados de inode / diretório em páginas de dados, o que também é bom para a capacidade de resposta da interface do usuário.Esta é uma má ideia. Se isso fosse útil, o kernel do Linux implementaria dessa maneira. Não acredito que haja uma razão para alterar mais do que alguns parâmetros de ajuste, pois um simples script de shell provavelmente não é mais inteligente que os algoritmos dos desenvolvedores do kernel.
Você basicamente tem dois casos:
Portanto, existem dois pontos principais:
Apesar de não haver problemas de falta de memória com muitos programas, alguns programas podem alocar memória com base na RAM atualmente livre (talvez seu navegador use mais memcache e você possa navegar mais rapidamente) e o kernel pode usar RAM livre para cache de disco e otimizações semelhantes. Quando você força a troca a ficar vazia, o kernel reduz o cache de leitura e, por exemplo, iniciar uma nova instância do Firefox leva mais tempo do que quando o Firefox ainda está no cache do disco.
Se você deseja ajustar o comportamento do kernel, consulte o parâmetro swappiness .
Dois recursos adicionais contribuem com @ peter-cordes:
Se você realmente deseja ter uma troca vazia, pode desativar a troca permanentemente. Eu não vejo por que tê-lo ligado por uma hora e depois esvaziá-lo tem vantagens sobre não ter swap.
fonte
Você pode obter os mesmos resultados dizendo ao kernel para liberar os caches:
Dessa forma, você evita o breve momento de possível falta de memória e deixa o kernel decidir o que é necessário e o que pode ser descartado.
fonte
Ao contrário da ideia comum, o SWAP em si não é ruim .
O que realmente torna o sistema lento é a atividade do kernel que move os Dados da RAM para o SWAP e de volta para a RAM, o
swappiness
.O sistema faz isso automaticamente conforme é configurado com o
swappiness
.Isso faz com que a memória de processos inativos seja despejada na partição de troca do disco rígido.
Eu mesmo trabalhei por anos com uma máquina que não tinha tanta memória RAM e sempre tive alguma memória SWAP usada. Ainda assim, minha máquina funcionou bem até você começar a mover a memória de volta para a RAM, talvez tentando fechar um aplicativo aberto. Então a carga de trabalho começou a aumentar.
Em vez disso, sugiro que você estude de perto qual aplicativo usa sua memória na linha de comando com o
htop
aplicativo e decida fechar algum aplicativo. Ognome-system-monitor
pode também fornecer uma boa visão, na guia Process.Se você tem grandes aplicativos que usam muita RAM. Não execute todos eles de uma vez.
fonte