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.
xnu
código aberto os internos. Eu retirei os quatro valores abordados que são mais relevantes para a exibição da pressão da GUI.Para esclarecer um pouco e tornar esse palpite mais preciso: pressão da memória é uma métrica usada pelo kernel (xnu) com um encadeamento dedicado chamado memory_status (anteriormente conhecido como Jetsam). Esse segmento é responsável por detectar quando a RAM disponível é baixa - o que no OS X pode forçar a troca e no iOS mata o aplicativo que consome mais memória (pois não há troca). No Mavericks, os dois sistemas operacionais estão mais próximos. O Memorystatus emite uma nota do kernel, que o tempo de execução do Obj-C eventualmente converte em um appDidReceiveLowMemoryWarning. Os aplicativos devem limpar a memória não utilizada ou estranha (por exemplo, caches). A libC de Darwin também limpa a memória automaticamente.
Há uma chamada de sistema específica (embora não documentada), vm_pressure_monitor (# 296, se bem me lembro), que permite que um cliente ouça eventos de pressão e veja quantas páginas físicas podem ser recuperadas.
Você pode visualizar eventos de pressão no Mavericks usando o Process Explorer para OS X - disponível para download em http://newosxbook.com/index.php?page=downloads . Isso mostra o "manômetro" de pressão, bem como os eventos de pressão.
fonte
A pressão da memória é definida por dois contadores que Mach mantém internamente:
vm_page_free_count
: Quantas páginas de RAM estão atualmente livresvm_page_free_target
: Quantas páginas de RAM, no mínimo, devem estar idealmente livres.Você pode vê-los facilmente usando o sysctl:
se a quantidade de páginas gratuitas ficar abaixo da quantidade desejada - temos uma situação de pressão.
Em http://newosxbook.com/articles/MemoryPressure.html
fonte