Eu pensei que toda a essência do swap era atuar como uma rede de segurança de armazenamento temporário quando a RAM estava cheia, mas minha partição de swap está sendo constantemente usada, embora às vezes eu tenha até 3 GB de RAM livre. Isso é normal?
kernel
swap
memory-usage
Mysterio
fonte
fonte
free -m
,top -b 1
Respostas:
Você pode tentar alterar seu valor "swappiness":
Do FAQ de swap do Ubuntu :
Além disso, você pode conferir: https://askubuntu.com/a/103916/54187
fonte
sudo sysctl --load=/etc/sysctl.conf
depois de editar o arquivo para aplicar as alteraçõesExistem alguns aspectos diferentes para sua pergunta.
Em primeiro lugar, qual é a sua definição de "livre". Na verdade, não é tão simples quanto parece no Linux (ou em qualquer sistema operacional moderno).
Como o Linux usa RAM (muito simplificado)
Cada aplicativo pode usar parte da sua memória. O Linux usa toda a memória desocupada (exceto os últimos Mb) como "cache". Isso inclui o cache da página, caches de inode, etc. Isso é uma coisa boa - ajuda a acelerar as coisas. Tanto a gravação no disco quanto a leitura do disco podem ser aceleradas imensamente pelo cache.
Idealmente, você tem memória suficiente para todos os seus aplicativos e ainda tem várias centenas de Mb restantes para cache. Nessa situação, desde que seus aplicativos não aumentem o uso de memória e o sistema não esteja lutando para obter espaço suficiente para o cache, não há necessidade de troca.
Depois que os aplicativos reivindicam mais RAM, eles simplesmente entram em parte do espaço usado pelo cache, diminuindo o cache. A desalocação do cache é barata e fácil o suficiente para ser feita em tempo real - tudo o que fica no cache é apenas uma segunda cópia de algo que já está no disco, para que possa ser desalocado instantaneamente ou é algo que gostaríamos teve que liberar para o disco nos próximos segundos de qualquer maneira .
Esta não é uma situação específica do Linux - todos os sistemas operacionais modernos funcionam dessa maneira. Os diferentes sistemas operacionais podem apenas relatar RAM livre de maneira diferente: alguns incluem o cache como parte do que consideram "livre" e outros podem não.
Quando você fala sobre RAM livre, é muito mais significativo incluir cache, porque é praticamente gratuito - está disponível caso algum aplicativo solicite. No Linux, o
free
comando relata nos dois sentidos - a primeira linha inclui cache na coluna RAM usada e a segunda linha inclui cache (e buffers) na coluna livre.Como o Linux usa swap (ainda mais simplificado)
Depois de usar a memória suficiente para que não haja um cache de bom funcionamento, o Linux pode decidir realocar uma memória de aplicativo não utilizada da RAM para trocar.
Isso não é feito de acordo com um limite definido. Não é como se você alcançasse uma certa porcentagem de alocação, então o Linux começa a trocar. Ele tem um algoritmo bastante "confuso". Isso leva em consideração muitas coisas, que podem ser melhor descritas por "quanta pressão existe para a alocação de memória". Se houver muita "pressão" para alocar nova memória, aumentará as chances de que algumas sejam trocadas para criar mais espaço. Se houver menos "pressão", isso diminuirá essas chances.
Seu sistema possui uma configuração de "troca" que ajuda a ajustar como essa "pressão" é calculada. Normalmente, não é recomendável alterar isso, e eu não recomendaria que você o alterasse. A troca é geralmente uma coisa muito boa - embora haja alguns casos extremos em que prejudica o desempenho, se você observar o desempenho geral do sistema, é um benefício líquido para uma ampla gama de tarefas. Se você reduzir o swappiness, deixe a quantidade de memória cache diminuir um pouco mais do que seria de outra forma, mesmo quando for realmente útil. Se isso é uma troca suficientemente boa para qualquer problema que você esteja tendo com a troca, é com você. Você deveria saber o que está fazendo, só isso.
Existe uma situação bem conhecida na qual a troca realmente prejudica o desempenho percebido em um sistema de desktop e é a rapidez com que os aplicativos podem responder à entrada do usuário novamente depois de ficarem ociosos por um longo tempo e com processos em segundo plano pesados em E / S (como um backup noturno). Essa é uma lentidão muito visível, mas não o suficiente para justificar a desativação da troca e é muito difícil de impedir em qualquer sistema operacional. Desative a troca e essa lentidão inicial após a verificação de backup / vírus pode não ocorrer, mas o sistema pode ficar um pouco mais lento o dia todo. Essa também não é uma situação limitada ao Linux.
Ao escolher o que deve ser trocado no disco, o sistema tenta coletar memória que não está sendo realmente usada - leitura ou gravação. Ele tem um algoritmo bastante simples para calcular isso, que escolhe bem a maior parte do tempo.
Se você possui um sistema em que possui uma quantidade enorme de RAM (no momento da escrita, 8 GB é uma quantidade enorme para uma distribuição Linux típica), raramente encontrará uma situação em que a troca é necessária. Você pode até tentar desativar a troca. Eu nunca recomendo fazer isso, mas apenas porque você nunca sabe quando mais RAM pode salvá-lo de algumas falhas de aplicativos. Mas se você sabe que não vai precisar, pode fazê-lo.
Mas como a troca pode acelerar meu sistema? Não trocar as coisas devagar?
O ato de transferir dados da RAM para a troca é uma operação lenta, mas só é usada quando o kernel tem certeza de que o benefício geral superará isso. Por exemplo, se a memória do aplicativo aumentou a ponto de quase não haver cache e a sua E / S é muito ineficiente por causa disso, é possível obter muito mais velocidade do sistema liberando alguma memória, mesmo após a despesa inicial de trocar dados para liberá-los.
É também o último recurso caso seus aplicativos solicitem mais memória do que você realmente possui. Nesse caso, a troca é necessária para evitar uma situação de falta de memória que geralmente resulta em um aplicativo travando ou precisando ser forçado a matar.
A troca é associada apenas a momentos em que o sistema está com desempenho ruim porque ocorre quando a RAM utilizável está acabando, o que tornaria o sistema mais lento (ou instável), mesmo que não houvesse troca. Então, para simplificar as coisas, a troca acontece porque o sistema está ficando atolado, e não o contrário.
Depois que os dados são trocados, quando são lançados novamente?
A transferência de dados fora do swap é (pelo menos para os discos rígidos tradicionais), tão demorada quanto colocar lá. Então, é compreensível que o seu kernel seja tão relutante em remover dados do swap, especialmente se não estiver sendo realmente usado (por exemplo, lido ou gravado). Se você possui dados em swap e eles não estão sendo usados, é realmente bom que eles permaneçam em swap, pois deixa mais memória para outras coisas que estão sendo usadas, potencialmente acelerando o sistema.
fonte
free -m
.Definir o valor da swappiness não funciona em todas as situações. Se isso funciona para você, ótimo. Caso contrário, escrevi um script para limpar periodicamente a troca, desativando-a e ligando-a novamente.
Alternar troca é um pouco arriscado se você não for cuidadoso. Se você não tiver RAM livre suficiente para armazenar tudo na RAM mais tudo no swap, tentar desabilitar o swap fará com que o sistema não responda. Meu script primeiro verifica se há RAM livre suficiente (o que demora um pouco, pois a quantidade real de RAM livre é diferente da que é
free
relatada como livre) e, em seguida, apenas alterna a troca se houver. Mas, se você estiver com pouca memória RAM, não inicie outro processo importante enquanto o script estiver em execução. Aqui está:Você deve executar este script como raiz (por exemplo, com
sudo
). Este script não deixará seu sistema sem resposta; se você tiver RAM insuficiente, ele se recusará a alternar a troca. Eu uso esse script sem problemas há quase cinco anos.fonte
Geralmente, a troca permanece sem uso nos sistemas atuais. Na minha experiência, os processos que estão sendo executados por um longo tempo sem operações intensivas são alterados para troca pelo linux.
Isso faz com que alguns programas afetados fiquem lentos.
Se você tiver muita RAM livre, poderá desativar o swap executando o comando:
swapoff -av
(você precisará desudo
direitos para isso.)Se não gostar do swap, poderá ativá-lo, usando o comando simétrico:
swapon -av
( novamentesudo
necessário).fonte
Depois que o swap é usado para um programa, ele tende a permanecer mapeado durante toda a vida útil do programa. Muitos programas possuem código (e dados) que raramente é usado. Depois que a memória é trocada, é improvável que ela seja trocada.
Uma maneira de forçar essas páginas para a memória é desligar o dispositivo de troca. Se você tiver dois, pode desligar um, ligar novamente e depois desligar o segundo. Se a troca for realmente necessária, ela se moverá entre os dispositivos. Você pode simplesmente desligar o dispositivo de troca (ou arquivo), mas se realmente precisar de espaço para troca, coisas drásticas podem acontecer.
Além das coisas normais da memória, o tempfs usa espaço de troca e será trocado como o restante da memória. Se você executar algo que exija muito disco temporário, isso poderá forçar a troca de páginas. Depois de criados, os arquivos temporários não podem mais ser usados após alguns minutos e são bons candidatos para serem movidos para o dispositivo de troca.
Em uma pitada, você pode usar um arquivo como um dispositivo de troca. Isso é útil se você precisar de espaço de troca extra temporariamente.
fonte
Editei o script de Scott Severance para corresponder às versões mais recentes do free, que já incluem um campo total de memória disponível.
fonte