Usar espaço de troca em vez da RAM pode diminuir drasticamente o PC.
Então, por que, quando tenho mais do que suficiente RAM disponível, meu sistema Linux (Arch) usa a troca?
Confira minha saída conky abaixo:
Além disso, isso poderia ser a causa dos problemas de velocidade e capacidade de resposta do sistema que estou tendo?
Saída de free -m
:
$ free -m
total used free shared buffers cached
Mem: 1257 1004 252 0 51 778
-/+ buffers/cache: 174 1082
Swap: 502 144 357
performance
swap
Stefan
fonte
fonte
Respostas:
É normal que os sistemas Linux usem alguma troca, mesmo se ainda houver RAM livre. O kernel do Linux se moverá para trocar as páginas de memória que raramente são usadas (por exemplo, as
getty
instâncias em que você usa apenas o X11 e algum outro daemon inativo).O uso do espaço de troca se torna um problema apenas quando não há RAM suficiente disponível e o kernel é forçado a mover continuamente as páginas de memória para trocar e voltar à RAM, apenas para manter os aplicativos em execução. Nesse caso, os aplicativos de monitor do sistema mostrariam muita atividade de E / S do disco.
Para comparação, meu sistema Ubuntu 10.04, com dois usuários logados com sessões X11 executando a área de trabalho GNOME, usa ~ 600 MB de swap e ~ 1 GB de RAM (sem contar os buffers e o cache fs), então eu diria que seus números para swap o uso parece normal.
fonte
Esse comportamento pode ser configurado definindo o valor de:
O valor padrão é 60. Configurá-lo como 0 significa nunca usar swap quando ainda há RAM restante e 100 trocando memória o mais rápido possível.
Para alterar o valor temporariamente (perdido na reinicialização):
Para alterar o valor permanentemente, edite o arquivo:
como root (por exemplo
sudo nano /etc/sysctl.conf
) e altere ou adicione (se não houver) a linha:para o valor desejado. Se esse arquivo não existir (por exemplo, no Arch Linux), tente
/etc/sysctl.d/99-sysctl.conf
.Houve um debate sobre se a troca com a memória livre disponível é boa ou ruim, mas a ajuda do Ubuntu realmente recomenda um valor de 10 para sistemas Desktop . Veja também este tutorial sobre o Digital Ocean for CentOS .
fonte
swappiness
O valor não tem efeito no meu sistema. Mesmo configurá-lo como 0, continuará a mover páginas cruciais e frequentemente usadas (por exemplo, o índice do meu IDE) para trocar quando ainda houver 2 GB de RAM grátis.O Linux começa a trocar antes que a RAM seja preenchida. Isso é feito para melhorar o desempenho e a capacidade de resposta:
O desempenho aumenta porque às vezes a RAM é melhor usada para cache de disco do que para armazenar memória de programa. Portanto, é melhor trocar um programa que está inativo por um tempo e, em vez disso, manter os arquivos mais usados em cache.
A capacidade de resposta é aprimorada trocando as páginas quando o sistema está ocioso, e não quando a memória está cheia e algum programa está sendo executado e solicitando mais RAM para concluir uma tarefa.
A troca desacelera o sistema, é claro - mas a alternativa à troca não é trocar, é ter mais RAM ou usar menos RAM.
fonte
Este é um post antigo, no entanto, eu ainda teria a liberdade de colocar meus pensamentos aqui.
Começando de baixo, o Linux primeiro dividia a memória em páginas (geralmente 4K por página no sistema x86_64). Depois disso, a memória virtual é criada, cujo mapeamento é feito com memória física usando a MMU (Unidade de Gerenciamento de Memória).
Os processos recebem memória alocada da área de memória virtual; portanto, observe que, quando você vê / proc / meminfo, verá o VMalloc * como os detalhes da memória virtual.
Digamos que você tenha um processo que solicite memória (digamos 300 MB - um navegador da web). O processo seria alocado a 300 MB da memória virtual; no entanto, não é necessário que a memória seja mapeada (que é mapeada para a memória física). Existe o conceito de "Copiar na gravação" para gerenciamento de memória, pelo qual, se seus processos realmente usarem a memória alocada na memória virtual (isto é, alguns gravam na memória), somente então eles serão mapeados para a memória física. Isso ajuda o kernel a funcionar corretamente em um ambiente de múltiplos processos com eficiência.
O que são cache?
Muita memória usada pelos processos é compartilhada. Digamos que a biblioteca glibc seja usada por quase todos os processos. Qual é o objetivo de manter várias cópias da glibc na memória, quando todo processo pode acessar o mesmo local da memória e fazer o trabalho. Esses recursos usados com freqüência são mantidos em cache para que, quando os processos exigirem, possam ser referenciados no mesmo local da memória. Isso ajuda a acelerar os processos, pois a leitura do glibc (etc.) De novo e de novo do disco seria demorada.
O exemplo acima foi para bibliotecas compartilhadas, por exemplo, semelhante também é válido para a leitura de arquivos. Se você ler um arquivo grande (digamos 100-200MB) pela primeira vez, levará muito tempo. No entanto, quando você tenta fazer a mesma leitura novamente, seria mais rápido. Os dados foram armazenados em cache na memória e a releitura não foi realizada para todos os blocos.
O que é buffer?
No que diz respeito ao buffer, quando um processo arquiva E / S, ele depende do buffer do kernel para gravar dados no disco. Os processos solicitam que o kernel faça o trabalho. Portanto, em nome do processo, o kernel grava os dados em seu "buffer" e informa ao processo que a gravação está concluída. De maneira assíncrona, o kernel continuará sincronizando esses dados no buffer para o disco. Dessa forma, os processos contam com o kernel para escolher um horário correto para sincronizar os dados no disco, e os processos podem continuar trabalhando adiante. Lembre-se, é a E / S geral que os processos normais estão executando. No entanto, processos especializados, que precisam confirmar que a E / S é realmente feita no disco, podem usar outro mecanismo para executar a E / S no disco. Alguns utilitários de código-fonte aberto são libaio. Além disso, existem maneiras de chamar a sincronização explícita para os FDs abertos no seu contexto de processos,
O que são falhas de página então?
Considere um exemplo, quando você inicia um processo (por exemplo, um navegador da web), cujo binário é de cerca de 300 MB. No entanto, os 300 MB completos do binário do navegador da Web não começam a funcionar instantaneamente. O processo continua passando de funções para funções em seu código. Como dito anteriormente, a memória virtual seria consumida em 300 MB, no entanto, nem toda a memória é mapeada para a memória física (RSS - a memória residente seria menor, consulte a saída principal). Quando a execução do código atinge um ponto, para o qual a memória não é realmente mapeada fisicamente, haveria uma falha na página. O kernel mapeia essa memória para física, associa a página de memória ao seu processo. Essa falha de página é chamada de "Falhas secundárias na página". Da mesma forma, quando um processo está executando as principais falhas de página de E / S do arquivo, são levantadas.
Quando e por que o Swap Out acontece?
Situação 1:
De acordo com os detalhes acima, vamos considerar um cenário em que a boa quantidade de memória se torna mapeada na memória. E agora um processo é iniciado, o que requer memória. Como discutido acima, o kernel precisará fazer algum mapeamento de memória. No entanto, não há RAM física suficiente disponível para mapear a memória. Agora, o kernel examinará primeiro o cache, terá algumas páginas de memória antigas que não estão sendo usadas. Ele liberará essas páginas em uma partição separada (chamada SWAP), liberará algumas páginas e mapeará as páginas liberadas para a nova solicitação. Como a gravação em disco é muito mais lenta que a RAM de estado sólido, esse processo leva muito tempo e, portanto, é observada uma lentidão.
Situação 2:
Digamos que você veja muita memória livre disponível no sistema. Mesmo assim, você vê que há muita troca acontecendo. Pode haver um problema provável de fragmentação da memória. Considere um processo que exige 50 MB de memória contígua do kernel. (tenha em mente contíguo). Obviamente, o kernel teria alocado páginas aleatoriamente para diferentes processos e liberado algumas delas. No entanto, quando exigimos memória contígua, ela deve procurar um pedaço que satisfaça a demanda dos processos. Se não conseguir obter essa memória, será necessário trocar algumas páginas antigas de memória e depois alocar páginas contíguas. Mesmo nesses casos, o SWAP out aconteceria. Iniciando o Kernel ver 2.6 e acima, esses problemas de fragmentação reduziram consideravelmente. No entanto, se o sistema estiver em execução por um longo período, esses problemas ainda poderão surgir.
Veja este exemplo ( saída vmstat )
@ 2016-10-30 03:57:04, vemos que ainda há uma boa quantidade de RAM livre disponível. No entanto, mesmo assim, a troca aconteceu. Verificamos a árvore do processo neste momento e não vimos nenhum processo que demandasse uma quantidade tão alta de memória (mais do que memória livre). A suspeita óbvia foi a Situação 2 descrita acima. Verificamos os logs buddyinfo e zoneinfo acima (Use echo m> / proc / sysrq-trigger para verificá-los, a saída entra em syslogs).
Para um sistema normal, a comparação das informações da zona é a seguinte. E gráficos para cache / memória livre / baixa também são mencionados abaixo
Observando as informações, fica claro que há fragmentação da memória no nó 0 e no nó 1 normal (o nó é uma máquina baseada em NUMA, portanto, vários nós (consulte numactl para verificar as informações do seu sistema)).
A fragmentação da memória também é uma razão pela qual o uso de swap pode aumentar mesmo quando há memória livre.
fonte
Ter mais memória disponível
Como todos disseram, sim, a troca ajudará você a se livrar da memória não utilizada, para que você possa ter mais memória disponível.
Hibernando
Mas o swap também pode ser usado para hibernar, o que pode ser realmente útil quando você tem um laptop ou deseja economizar energia e colocar seu computador e trabalhar em hibernação antes de sair do trabalho. Assim, você pode começar mais rapidamente na manhã seguinte.
Ter uma função de hibernação é uma das principais razões pelas quais ainda hoje recomendamos que você tenha pelo menos o tamanho da RAM para a troca. Dessa forma, o sistema pode colocar toda a RAM usada no swap e entrar em hibernação.
Defeitos
Tome cuidado para que uma vez trocados os dados de um processo possam ser lidos no swap mesmo após o desligamento, a menos que o swap tenha sido criptografado (é claro).
O uso de troca criptografada com hibernação não funciona imediatamente com todas as distribuições. Você precisa usar uma chave de criptografia constante (algumas configurações geram aleatoriamente a chave de criptografia de espaço de troca em cada inicialização) e um initrd / initramfs para ativar o volume criptografado antes de continuar.
fonte
Muitos programas modernos são construídos em estruturas inchadas que arrastam muitos lixo que você realmente não precisa para executar o programa. Trocar essas páginas não usadas libera RAM para cache e programas que podem realmente fazer uso da RAM.
Falo por experiência pessoal dolorosa aqui.
No ano passado, mudei um dos meus sites para uma nova e promissora estrutura de servidores da Web, construída sobre o Firefox. Pode parecer estranho criar um sistema do lado do servidor sobre um programa focado no cliente como o Firefox, mas teve alguns benefícios enormes. O Firefox é muito poderoso, oferece alguns serviços internos realmente impressionantes e reduz a incompatibilidade de impedâncias entre servidor e cliente para que ambas executem plataformas semelhantes.
Mas há uma desvantagem: o Firefox é grande. Realmente grande. Esse era um tipo de projeto da versão 1.x, portanto eles não haviam conseguido resolver problemas como remover o suporte da GUI. [*] Meu site não precisava disso, mas porque a tecnologia VPS usada pelo meu provedor de hospedagem não ' permitir espaço de troca, esse código da GUI e todas as outras partes do Firefox que não usei consumiam RAM real. Acabei precisando de 512 MB de RAM, no mínimo, apenas para executar o site sem travar devido ao esgotamento da memória. Se meu VPS tivesse algum espaço de troca, eu provavelmente poderia ter conseguido um plano de 256 MB.
[*] A remoção do código da GUI da estrutura pode até não ser desejável, pois um dos benefícios dessa plataforma era a raspagem na web de alta fidelidade, porque a estrutura do lado do servidor podia baixar páginas da Web de outro site e você podia manipulá-las. assim como você faria no lado do cliente. Pense em mashups. Muito desse tipo de coisa seria interrompido se você não pudesse "renderizar" a página da web em algum contexto gráfico.
A propósito, esse quadro da web está basicamente morto agora, então não há sentido em nomeá-lo e envergonhá-lo. É melhor levar a lição mais a sério: sim, a troca ainda é útil, mesmo se você tiver shows de RAM grátis.
fonte
Do Ubuntu Swap FAQ ao qual Marcel se vinculou
Eu acho que você deve aumentar seu espaço de troca no seu sistema. A troca acelera a alocação de memória RAM, permitindo descartar os dados já paginados.
fonte
Eu acho que o "Gilles" já mencionou o fato de que, embora você tenha RAM mais do que suficiente, o swap pode ser útil durante certas "deficiências", além de salvar persistentemente alguns dados mesmo após os desligamentos - ou estou errado ao supor isso? ( desde que a RAM seja liberada após a reinicialização) Eu tenho 12 GB de RAM disponível no meu sistema e também já pensei sobre essa questão antes. Em um ponto, quando eu desabilitei todas as trocas e dependia apenas da minha RAM, tive experiências dolorosamente difíceis tentando depurar algum erro ou falha do sistema etc. após o desligamento do sistema. Desde então, reativei a partição de troca.
fonte