A pressão da memória não é um simples medidor de porcentagem de memória livre e parece ser um gráfico de 0 a 100%. O sysctl
valor de vm.memory_pressure
é calculado em relação a um destino calculado que rastreia a proporção entre as páginas de memória livre e inativa e as páginas com fio e ativas. Os contadores absolutos são visualizados usando a vm_stat
ferramenta de linha de comando para inspecionar a alocação detalhada da memória virtual. Jonathan Levin tem uma excelente documentação em http://newosxbook.com/articles/MemoryPressure.html, cobrindo a memória virtual do macOS e iOS e como eles calculam a pressão da memória, bem como as ações tomadas quando o índice de pressão é alto.
A memória virtual relevante (vm) que alimenta o cálculo de vm.memory_pressure
são:
vm.page_free_count
- uma contagem absoluta de páginas gratuitas
vm.vm_page_free_target
- uma meta ou meta calculada para uma situação "sem pressão"
vm.page_free_wanted
- o que o sistema vm gostaria de liberar para aliviar o atual índice de pressão calculado
Portanto - se você estiver acompanhando sua pressão de memória com o Monitor de atividades (ou verificando os valores sysctl programaticamente ou no shell da linha de comando), seria bom examinar esses quatro valores:
sysctl -a vm | egrep "page_free|pressure"
Há um novo comando memory_pressure
introduzido no Mavericks e quando eu o executo para colocar o subsistema de memória em um estado de aviso - você pode ver a pressão da memória aumentar para uma faixa amarela.
A ferramenta alocados cerca de 4 GB de memória para a ferramenta como o gráfico pressão aumentou de forma constante a este estado, onde aparentemente o nível de "alerta" é representada graficamente: sudo memory_pressure -l warn
. Como você pode ver, o sistema anterior à pressão usava 5,9 GB e depois usava até 7,99 GB, o que nem precisa ser adicionado devido à troca e compactação.
Depois de observar como vm_stat 15
o aviso mostrava o resultado em nenhuma paginação mensurável, fechei a ferramenta (Control-C) e executei novamente a ferramenta para tornar a pressão da memória crítica:sudo memory_pressure -l critical
Eu não deixei isso funcionar por mais de alguns minutos quando a paginação estava sendo iniciada e, uma vez que a ferramenta dizia que eu tinha 5 GB de RAM paginada em disco, não queria encher minha unidade e sair da ferramenta.
Você pode observar a rapidez com que o sistema liberou a RAM após o término do aviso e também como ele entrou no território "vermelho" para mostrar que o sistema de memória virtual não pôde compactar páginas suficientes para evitar a troca para o disco. Meu palpite educado é que vermelho, a pressão indica troca e superalocação dramática e / ou um momento em que as páginas gratuitas ficam abaixo da quantidade preferida pelo sistema e está eliminando ativamente as páginas inativas e / ou as páginas de troca que se espera que sejam usadas na troca. Da mesma forma, o sistema se recupera rapidamente quando as alocações são liberadas e a pressão é retirada do sistema de memória virtual.