Um fenômeno comum no meu uso diário (e vários outros de acordo com várias postagens na Internet) do OS X, o sistema parece ficar lento sempre que não há mais memória "Livre" disponível. Supostamente, isso ocorre devido à troca, pois a atividade de disco pesado é aparente e o vm_stat relata muitas paginações. (Corrija-me do errado)
No entanto, a quantidade de memória RAM "Inativa" geralmente fica em torno de 12,5% a 25% de toda a memória disponível (^ 1.) Quando a troca é iniciada / ocorre / termina.
De acordo com http://support.apple.com/kb/ht1342 :
Memória inativa
Esta informação na memória não está sendo usada ativamente, mas foi usada recentemente.
Por exemplo, se você estava usando o Mail e o encerrou, a RAM que o Mail estava usando é marcada como memória inativa. Essa memória inativa está disponível para uso por outro aplicativo, assim como memória livre. No entanto, se você abrir o Mail antes que sua memória Inativa seja usada por um aplicativo diferente, o Mail abrirá mais rapidamente porque sua memória Inativa é convertida em Memória Ativa, em vez de carregar o Mail no disco rígido mais lento.
E de acordo com http://developer.apple.com/library/mac/#documentation/Performance/Conceptual/ManagingMemory/Articles/AboutMemory.html :
A lista inativa contém páginas que atualmente residem na memória física, mas que não foram acessadas recentemente. Essas páginas contêm dados válidos, mas podem ser liberadas da memória a qualquer momento .
Então, basicamente: quando um programa é encerrado, sua memória fica marcada como Inativa e deve ser claimable a qualquer momento. Ainda assim, o OS X prefere começar a trocar a memória pelo arquivo Swap em vez de apenas reivindicá-la, sempre que a memória "Free" ficar baixa.
Por quê? Qual é a vantagem desse comportamento em, digamos, liberar instantaneamente a memória inativa e nem tocar no arquivo de troca? Algumas fontes (^ 2.) Indicam que o OS X pagina a memória "Inativa" para trocar antes de liberá-la, mas isso não faz sentido agora, se a memória puder ser liberada da memória a qualquer momento ? Trocar é caro, liberar é barato, certo?
Esse comportamento pode ser alterado usando alguma preferência ou hack conhecido? (De preferência um que não inclua a desativação de swap / dynamic_pager por completo e a reinicialização ...)
Aprecio o comando de limpeza , bem como o conceito de Reparar permissões de disco para forçar um pouco de memória livre, mas essas são maneiras de forçar dolorosamente mais memória livre do que realmente consertar a lógica de decisão de troca / liberação ...
Entre uma pergunta semelhante foi feita aqui: http://forums.macnn.com/90/mac-os-x/434650/why-does-os-x-swap-when/ e aqui: http: //hintsforums.macworld .com / showthread.php? t = 87688 mas, embora os OPs tenham respondido novamente à pergunta principal, nenhuma das respostas endereça uma resposta para ela ...
^ 1. ATUALIZAÇÃO 17-mar-2012 Desde que postei essa pergunta pela primeira vez, passei de 4 GB para 8 GB de RAM instalada, e o problema permanece. A quantidade de RAM "Inativa" era de 0,5 GB a 1,0 GB antes e agora é tipicamente de 1,0 a 2,0 GB quando a troca inicia / ocorre / termina, ou seja, parece que cerca de 12,5% a 25% da RAM é preservada como Inativa pelo OSX lógica do kernel.
^ 2 Por exemplo, https://apple.stackexchange.com/questions/4288/what-does-it-mean-if-i-have-lots-of-inactive-memory-at-the-end-of-a-work- dia :
Depois que toda a sua memória é usada (a memória livre é 0), o sistema operacional grava a memória inativa no arquivo de swap para liberar mais espaço na memória ativa.
ATUALIZAÇÃO 17 / mar / 2012
Aqui está um resumo dos métodos sugeridos para ajudar até agora:
O comando de limpeza
"Usado para aproximar as condições iniciais de inicialização com um cache de buffer de disco frio para análise de desempenho. Não afeta a memória anônima que foi alocada através de malloc, vm_allocate, etc".
Isso é útil para impedir que o osx troque o cache do disco (o que é ridículo que o osx realmente faça isso em primeiro lugar), mas com a desvantagem de que o cache do disco seja liberado, o que significa que, se o cache do disco não estivesse prestes a ser trocado, seria possível acabar com um cache de buffer de disco frio, provavelmente afetando negativamente o desempenho.
O aplicativo FreeMemory e / ou reparação de permissões de disco para forçar um pouco de memória livre
Não ajuda a liberar memória, movendo apenas alguns gigabytes de conteúdo da memória da ram para o hd. No final, isso causa muitos swap-ins quando tento usar os aplicativos que estavam abertos ao liberar memória, pois grande parte de sua vm está agora em swap.
Acelerando a alocação de troca usando o dynamicpagerwrapper
Parece uma coisa boa a ser feita para acelerar o uso da troca, mas não resolve o problema da troca osx em primeiro lugar enquanto ainda há memória inativa.
Desativando a troca desativando o dynamicpager e reiniciando
Isso forçará o osx a não usar swap no preço do sistema travado quando toda a memória for usada. Não é uma alternativa viável ...
Desativando a troca usando um dynamicpager hackeado
Semelhante à desativação do dynamicpager acima, alguns trechos dos comentários da postagem do blog indicam que esta não é uma solução viável: "A memória inativa está alta como sempre". "quando o sistema está ficando sem memória, todo o sistema trava ...", "se você consumir toda a memória do mac, a máquina provavelmente trava"
Para resumir, ainda não conheço uma maneira de desativar o Mac OS X de usar swap quando ainda há memória "Inativa". Se não for possível, talvez pelo menos haja uma explicação em algum lugar do por que o osx prefere trocar a memória que pode ser liberada da memória a qualquer momento ?