Por que o OS X usa swap quando há muita “memória inativa”?

21

Estou usando o OS X de alguns meses (Lion e agora Mountain Lion). Eu tenho 8 GB no meu mini e quase diariamente agora chegar perto disso. No Windows 7 com 8 GB nunca tive esse tipo de problema. De qualquer forma, eu li na net, que a memória inativa é o cache de aplicativos dos programas que estão fechados recentemente e pode ser usado para uma reabertura mais rápida. E essa memória inativa pode ser liberada para um novo aplicativo, se necessário. Não é liberado. Em vez disso, o OS X inicia a troca. Então, minha pergunta é por que o OS X usa swap quando há muita "memória inativa"? Aqui uma tela que mostra o que quero dizer:

Eu realmente espero que haja uma distância para fazer com que o OS X use esses 2,69 GB antes de começar a trocar. Eu realmente o faço.

    
por Balchev 12.08.2012 / 14:29

4 respostas

17

A troca aparentemente aconteceu quando as páginas de RAM inativas estavam realmente ativas.

( Atualização: como foi esclarecido em um comentário, este não é o seu caso. Assim, pessoas com o mesmo problema podem avançar para a regra horizontal .)

Ou seja. você tinha muitos programas em execução e o kernel trocava algumas páginas. Então você saiu de alguns programas. O kernel marca suas páginas de RAM como inativas. Mas isso não trará as páginas de volta à RAM até que essas páginas sejam necessárias. Isso resulta em páginas inativas e trocadas.

Por que não trocar páginas preventivamente? Porque isso estaria apostando contra as probabilidades: no longo prazo você perde. Vamos pensar em um exemplo simplificado: dois programas A e B que não cabem na RAM ao mesmo tempo. O programa A ainda está em execução e todas as páginas trocadas pertencem a A. O programa B foi encerrado e todas as páginas inativas pertencem a B.

Se o kernel preventivamente trocar as páginas de A e imediatamente após:

  • o programa A precisa acessar suas páginas - > Você ganha - as páginas já estão na RAM.
  • você inicia o B novamente - > Você perde - você "paga" o custo de trazer as páginas para a RAM e agora você precisa enviá-las de volta.
  • você lança outro programa C - > Você perde se A e C não couberem na RAM ao mesmo tempo. Se eles se encaixam, você é mesmo.

Considere também que a troca (gravação em disco) é mais cara que a troca (leitura do disco). O que torna essa "aposta" ainda mais sem atrativos.

Resumindo: confie no seu kernel e não tente enganá-lo.

Atualização: Acontece que a memória inativa não funciona, pois o artigo Usando o Activity Monitor para ler a Memória do Sistema levou muitas pessoas a acreditarem trabalho. A definição dada no artigo para memória inativa está correta:

This information is in RAM but it is not actively being used, it was recently used.

Mas o exemplo a seguir é totalmente enganoso e simplificado (como meu exemplo para ser franco):

For example, if you've been using Mail and then quit it, the RAM that Mail was using is marked as Inactive memory. Inactive memory is available for use by another application, just like Free memory. However, if you open Mail before its Inactive memory is used by a different application, Mail will open quicker because its Inactive memory is converted to Active memory, instead of loading it from the slower drive.

Pesquisei mais recursos on-line e terminei para este tópico a lista de discussão do kernel do darwin, que é bastante informativa. Citando Jim Magee (da equipe de Darwin - eu acho):

In short, the kernel VM system when dealing with memory pressure scans through in-use pages and tries to keep them in a balance between active and inactive markings. The inactive pages are scanned for reuse while marked as inactive. If they have been reused, they are marked as active and some other page must move from active to inactive state to detect if it is in active use. So, inactive is a misnomer. It is shorthand for "possibly inactive, lets try to verify that."

As you discovered, the internal balance we (currently) strive for is approximately 2/3 active vs 1/3 inactive...

Isso explica o comportamento que você observa. Ou seja as páginas inativas que você vê pertencem a programas em execução que não foram usados recentemente. Então, quando você inicia um novo programa, as páginas inativas são trocadas. Ao mesmo tempo, as páginas de outros programas são marcadas como inativas para manter a proporção de 2/1 entre ativo e inativo.

O tópico também contém algumas sugestões para saber mais sobre os componentes internos da darwin . Há também algumas sugestões no caso de você começar a investigar o uso de memória por causa de problemas de beachball (que geralmente têm pouco a ver com isso).

A conclusão continua a mesma: confie no seu kernel e não tente enganá-lo. : -)

    
por 21.08.2012 / 22:23
5

Você pode desabilitar a paginação com segurança se tiver ram suficiente.

Experimente estes comandos.

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
sudo rm /private/var/vm/swapfile*

Em seguida, reinicie e verifique se o processo dynamic_pager não está mais sendo executado.

Verifique se nenhum arquivo de troca foi criado em /private/var/vm/ .

Para reativar, experimente os seguintes comandos:

sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist

Você também pode desativar o Spotlight para liberar mais memória RAM e reduzir a atividade do disco. Os seguintes comandos são usados para desabilitar e habilitar o Spotlight.

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist
sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.metadata.mds.plist
    
por 19.08.2012 / 16:58
1

O sistema está funcionando como projetado. Mesmo quando não há pressão de memória, pode fazer sentido escrever algumas páginas que não podem ser descartadas, mas que não foram usadas recentemente para trocar quando o sistema não está ocupado. Dessa forma, se houver pressão de memória mais tarde, essas páginas podem ser removidas da RAM sem precisar primeiro gravá-las para trocar enquanto o sistema estiver ocupado.

    
por 17.07.2013 / 21:59
0

Não há muito que você possa fazer. Por que isso acontece? Porque é apenas como o OS X funciona. A parte interessante é como a memória ocupada está ficando maior a cada noite que o Mac fica.

O que você pode fazer:

  1. Atualizar a RAM.
  2. Execute o comando holy " purge " para limpar a maior parte da memória inativa, sempre que for necessário.
  3. Desative o link de swap
por 22.08.2012 / 15:35

Tags