O que é memória de troca?

26

Estou usando a RAM para armazenar algumas das minhas tabelas de banco de dados e as outras são armazenadas no disco rígido.

Hoje eu soube que meus processos estão usando memória de troca. Agora, o que é memória de troca e como posso detectar qual processo está usando memória de troca e como posso impedi-los de usá-la?

030
fonte
não existe nenhuma maneira de descobrir quais processos estão usando memória swap ??
observe o gerenciador de tarefas do Windows (ou ferramentas similares) quanto à quantidade de arquivos de página usados ​​e falhas de página.
A troca não é uma coisa por processo, é para todo o sistema operacional. "vmstat" mostra informações sobre a quantidade de trocas que você está usando.
jrockway
eu trabalho no linux não no wimdows
tenho o motivo desse uso de swap ..... alguém estava tentando analisar meu site e é por isso que toda a coisa está acontecendo sem qualquer causa do nosso lado. Obrigado a todos por suas respostas, isso me ajudou muito como sempre :-)

Respostas:

41

Se você ficar sem memória física, use a memória virtual, que armazena os dados na memória no disco. A leitura do disco é várias ordens de magnitude mais lenta que a leitura da memória; portanto, isso torna tudo mais lento. (A troca de dados entre a memória real e a memória virtual está "trocando". O espaço no disco é "espaço de troca".)

Se seu aplicativo estiver "usando swap", você precisará usar menos memória ou comprar mais RAM.

(A troca é útil porque os aplicativos que não estão sendo usados ​​podem ser armazenados no disco até serem usados. Em seguida, eles podem ser "paginados" e executados normalmente novamente. Embora não esteja na memória, o sistema operacional pode usar essa memória para outra coisa, como cache de disco. Portanto, é um recurso muito útil, mas se você não possui memória física suficiente para executar seu programa, definitivamente precisa de mais memória. Felizmente, hoje em dia a memória é realmente muito barata.)

jrockway
fonte
1
Por uma questão de correção: memória virtual significa usar endereços de memória virtual (algo que sempre é ativado em uma CPU moderna, independentemente da quantidade de RAM disponível) e não está diretamente relacionado à troca (embora sejam usados ​​em combinação, eles são conceitos basicamente diferentes).
fortran
@fortran, para dupla correção, memória virtual é o termo que o Windows usa quando se refere ao arquivo de paginação (troca) .
sleblanc
7

Um computador possui uma certa quantidade de memória física. Mas na maioria das vezes queremos mais. Então trocamos um pouco de memória no disco.

Cada vez que precisamos dessa memória, ela precisa ser trocada novamente (trocando outra peça). Existem algoritmos extremamente inteligentes para minimizar o atraso, mas ainda temos que esperar algumas vezes.

No Windows, se você olhar para o gerenciador de tarefas, poderá mostrar as falhas da página da coluna. Isso mostra o número de vezes que um aplicativo solicita uma parte da memória que estava no disco e precisa ser trocada. Muitas falhas de página = aplicação lenta.

Este processo é usado em vários níveis. Um resumo de rápido a lento:

  • No nível da CPU, existem registros. Essas são as memórias mais rápidas, mas a quantidade é limitada.
  • Também na CPU há um pequeno cache de memória. Aqui, um pequeno pedaço do programa em execução é armazenado para acesso rápido. Pesquise nos algoritmos de previsão de ramificações, se quiser saber mais.
  • Às vezes, existem caches de nível 2 entre a CPU e a memória principal.
  • O próximo nível é a memória principal (RAM).
  • O último nível e o mais lento de todos é o disco, às vezes você pode usar pen drives como memória extra.
Toon Krijthe
fonte
3
cat /proc/pid/smaps

Se você não quiser usar o swap, não use uma partição de swap (comente a entrada da linha /etc/fstab), mas isso impedirá o início de um novo processo e fará com que o malloc falhe se você ficar sem memória física. Essa não é uma boa idéia em geral ... não é muito segura e nem é muito útil, pois o sistema operacional manterá as páginas quentes na memória e trocará para o disco aquelas que não estão sendo usadas recentemente.

Outra solução poderia ser invadir o banco de dados para bloquear as páginas na memória (eu sei que isso pode ser feito, mas agora não sei exatamente como), mas, de qualquer forma, é provável que seu banco de dados use sua própria troca e mecanismos de cache.

Para saber o que é a troca e como a memória virtual funciona ... Eu recomendo que você dê uma olhada em algumas palestras do sistema operacional, talvez o MIT Open Courseware possa ser útil.

fortran
fonte
Como a configuração padrão em muitas distribuições linux é a confirmação excessiva de memória, o "pior" que acontecerá é que o killer do OOM começará a sniping de processos, provavelmente começando com o DBMS (e com as tabelas "armazenadas na RAM" que provavelmente não são boas). coisa).
Symcbean # 5/16
1

Eu encontrei uma resposta em parte. Uma Memória de Troca é um espaço no Disco Rígido do seu computador que os Sistemas Operacionais usarão para colocar as informações que realmente estão na RAM para liberá-las para outro aplicativo. Isso deve ser feito quando o sistema precisar de memória para um novo processo e não houver, para que possamos ver que, se nosso sistema tiver bastante RAM, talvez não precise de memória SWAP.

ATUALIZAR

Para descobrir onde trocar espaço (ou memória virtual), você pode acessar o Gerenciador de tarefas (CTRL + ALT + DEL) e ativar a opção VIEW -> COLUMNS -> VIRTUAL MEMORY. Agora apenas calcule a diferença entre o uso da memória e a memória virtual. Também aqui está uma instrução de como vê-lo se você estiver executando o Vista: http://www.ehow.com/how_5067693_increase-swap-space.html

faya
fonte
-1

Swap é o espaço do disco rígido usado como RAM. É (relativamente falando) muito lento, mas impede que os computadores falhem quando estão tentando lidar com mais dados do que a RAM pode suportar.

Para impedir que os processos usem swap - instale mais RAM.

Quentin
fonte
1
Se você não deseja trocar, pare de usar um arquivo de paginação. Mas espere outros problemas.
1
Não é. A troca está movendo um bloco de dados do disco rígido para a memória física. Uma leitura única, que normalmente é rápida o suficiente.
@xtofl a resposta não mencionou troca, apenas troca de partição, e o comentário do gamecat não teve nada a ver com o que você disse? : P
RapidWebs
-1

Se você não deseja que seus processos usem memória swap, desative completamente a memória swap. Infelizmente, se você ficar sem memória, o kernel do Linux matará alguns de seus processos em execução para liberar alguma memória para uso.

Se você possui RAM suficiente para o seu sistema, pode realmente ficar sem trocar memória.

Eu tenho um laptop com 768Mb de RAM que não usa memória de troca. É bom o suficiente para as minhas necessidades. Eu tenho um servidor com 256Mb de RAM e não usa memória de troca. Está executando 8 servidores virtuais usando a virtualização OpenVZ, sem problemas.

Portanto, depende de você se você precisar de memória de troca.

sybreon
fonte
COMO você está executando 8 VMs em uma máquina com apenas 256 megabytes de RAM?!?
Warren
É possível com o VZ porque a RAM não é completamente particionada, pois as bibliotecas comuns são compartilhadas entre as VMs ou algo que tenha efeito. Portanto, 8 x 64M não é necessariamente 512M. :)
sybreon
no entanto - como o dispositivo subjacente está funcionando de maneira estável?
Warren
Ao trocar programas inativos, você tem mais memória para armazenamento em cache de arquivos. E isso acelera as coisas. essa leitura única é geralmente bastante rápida e tem um efeito insignificante em geral. não é usado apenas quando você sai dos limites em relação à sua RAM disponível. Já vi máquinas com 16 GB de RAM usarem SWAP às vezes.
RapidWebs 17/07/2014
além disso, eu não recomendaria desativar o SWAP em um servidor de banco de dados. Seus clientes ou aplicativo da web não ficariam muito satisfeitos quando o OOM executasse o back-end em uma operação simples de backup noturno ou algo semelhante? seria mais inteligente ajustar o cache do banco de dados em relação ao uso do aplicativo e à memória disponível. se ele já estiver trocando, ele precisará de mais memória RAM ou para configurar melhor seu servidor de banco de dados. caso contrário, desabilitar o SWAP forçaria o OOM a matar o servidor de banco de dados toda vez que ele for trocado. que, a julgar pela sua pergunta, é frequentemente.
RapidWebs 17/07/2014