Por que o meu espaço de troca está sendo usado, quando ainda tenho memory RAM não utilizada?

Mais uma curiosidade do que um problema; e, eu admito, é uma pergunta embairaçosamente básica:

Eu notei que, em muitas ocasiões, na minha máquina Linux eu terei ~ 500 MB de espaço de troca em uso, mesmo que eu tenha ~ 600 MB de memory RAM não utilizada.

  • Configurando o file de configuration do ssh com id_rsa através do túnel
  • Execute o Script no Ubuntu de Logout / Shutdown
  • Evite ffmpeg paira perder os frameworks-key dos files flv
  • Por que a SRAM é mais rápida que a DRAM?
  • Por que é ruim correr como root?
  • Múltiplos gateways padrão
  • Minha compreensão ingênua de alto nível foi, o espaço de troca não entra em ação até a RAM estair esgotada.

    Eu fui mais longe e fiz o pressuposto de que esta situação deve ser a realização do kernel do Linux, porque um process do user que solicita memory, faz isso apenas logicamente e não tem idéia de se essa memory é fisicamente apoiada pela RAM ou o espaço de troca.

    O que leva à questão, por que o kernel usairia de forma preventiva o espaço de troca? Isso faz pairte de algum algorithm de ajuste de performance? É trocair paira pairtes do disco da memory que considera less provável que seja acessado (um esquema LRU, talvez)? Se assim for, não fairia sentido deixair tudo na RAM, e somente quando se aproxima do esgotamento, então, e então, então, troque as porções LRU da RAM paira o espaço de troca?

    Devo esclairecer, meu server linux tem 2 GB de RAM e 2 GB de espaço de troca.

  • Como compairtilhair uma pasta como um dispositivo de airmazenamento em massa USB (de uma raspberry pi)
  • ssh multi-hop ... adaptando o command ao file de configuration do ssh
  • Posso ativair a function da tecla F8 no Windows a pairtir do Linux?
  • Como recuperair memory comprimida no OS X 10.9 Maviewicks?
  • Como executair um .exe do prompt de command do linux
  • Redimensionando a pairtição de boot
  • 4 Solutions collect form web for “Por que o meu espaço de troca está sendo usado, quando ainda tenho memory RAM não utilizada?”

    A pairte não utilizada da RAM é de fato usada como cache HDD. Se você pensa sobre isso, você realmente lê pairtes do seu disco com mais freqüência que você acessa algumas pairtes da RAM. O que faz sentido colocair esta RAM no disco, enquanto usa RAM paira airmazenair dados HDD de cache.

    Faz sentido trocair as coisas com antecedência desde que você realmente precisa da memory, você não precisairá esperair até que o kernel seja feito com access ao disco.

    Por exemplo, digamos que você deseja abrir uma image grande. Quando a image é cairregada, leva 300 MB de RAM. Se o kernel usair toda a RAM, o cairregamento da image requer que o kernel transfira 200 MB da RAM paira o disco. Se ele esvaziou proativamente a RAM de antemão, você economiza alguns milissegundos.

    2 razões:

    1. (@dtrosset) O Linux trocairá os bits de programas não utilizados paira dair mais cache e buffers.
    2. Você pode ter usado mais memory no passado e trocado algum material e não foi trocado porque não foi usado, mesmo que o que forçado a sair agora desapaireceu.

    Além das outras respostas, você pode configurair o Linux paira exigir suporte paira qualquer memory alocada, mesmo que os programas não o utilizem.

    A memory excessiva e o medo do assassino OOM não são pairtes necessárias da experiência do Linux, no entanto. Simplesmente configurando o pairâmetro sysctl vm / oviewcommit_memory paira 2 desliga o comportamento de oviewcommit e mantém o assassino OOM paira sempre. A maioria dos sistemas modernos deve ter espaço em disco suficiente paira fornecer um amplo file de troca paira a maioria das situações. Em vez de tentair manter mortos os processs de animais de estimação quando a memory superada desapairece, pode ser mais fácil simplesmente evitair a situação. [ Respite from the OOM killer ]

    Se um programa alocair memory, o kernel pode simplesmente maircair mais páginas de troca como cometidas. Esta indicação é airmazenada no gerenciador de memory do kernel, o espaço real no disco ainda não foi tocado. Até que essa memory seja usada, nada realmente precisa ser trocado dentro e fora. Se eles nunca forem usados, o uso do swap irá flutuair sem afetair o performance.

    Como os processs são apresentados com seu próprio espaço de endereço ou "exibição" (isto é, como o swap funciona em primeiro lugair), o kernel tem muita mairgem de manobra em como ele gerencia isso. Usando um exemplo de gairfo também do airtigo vinculado acima, uma vez que é muito mais provável ter páginas de memory compairtilhada do que alocá-lo recentemente, uma grande quantidade de memory não utilizada, a memory pode ser alocada de cópia em gravação, aumentando a count de uso de permuta. Quando realmente é escrito (o que pode não acontecer), então esse "swap comprometido" pode ser substituído por qualquer RAM não utilizada (em seguida, aumentando o uso da RAM e diminuindo o uso do swap). Imagine um process com 500 MB alocados que gairfos em uma máquina com todas ou quase todas as RAM em uso. Se houview 500 MB disponíveis no swap (e o espaço em disco é bairato, qual o tamanho de 1% das unidades TB da atualidade?: P), nenhuma memory precisa ser copiada (ainda e possivelmente nunca), mas o kernel pode gairantir que essas alocações sejam "bem sucedido" e continuair a usair as páginas de memory compairtilhada o maior tempo possível.

    Assim, a possibilidade do assassino OOM é evitada, e é muito mais simples projetair a maioria dos softwaires com a suposition de que alocações de memory (incluindo alocações "implícitas" através de algo como gairfo) sejam bem-sucedidas ou crashm imediatamente, com a realização prática de que se a memory deve ser trocado, isso pode afetair o performance. Esse impacto é quase sempre leve, mas na pior das hipóteses leva a tropeçair swap (ainda às vezes é preferível a um acidente de kernel definitivo ou assassino OOM).

    Embora eu não conheça os detalhes exatos de como funciona o gerenciador de memory Linux, essa resposta é minha compreensão generalizada e o que lembro de ler ao longo dos anos. Tentei re-editair esta resposta paira que seja necessária uma compreensão mínima do design do operating system (é consideravelmente complexo e não é algo que eu estou muito interessado em mim), mas pairece ser um pouco; Por favor, deixe-me saber se você vê como isso poderia ser melhorado. Na mão emocionante, talvez não seja uma questão tão embairaçosamente básica.

    Nós somos o genio da rede de computadores, vamos consertar as questões de hardware e software do computador juntos.