La pressione della memoria non è un semplice indicatore della percentuale di memoria libera e sembra essere un grafico dallo 0 al 100%. Il sysctl
valore di vm.memory_pressure
viene calcolato in relazione a un target calcolato che tiene traccia del rapporto tra le pagine di memoria libera e inattiva rispetto alle pagine cablate e attive. I contatori assoluti vengono visualizzati utilizzando lo vm_stat
strumento da riga di comando per controllare l'allocazione dettagliata della memoria virtuale. Jonathan Levin ha un'eccellente documentazione su http://newosxbook.com/articles/MemoryPressure.html che copre sia la memoria virtuale macOS che iOS e come calcola la pressione della memoria e le azioni intraprese quando l'indice di pressione è elevato.
Le relative memorie virtuali (vm) che alimentano il calcolo di vm.memory_pressure
sono:
vm.page_free_count
- un conteggio assoluto di pagine libere
vm.vm_page_free_target
- un obiettivo o obiettivo calcolato per una situazione "senza pressione"
vm.page_free_wanted
- cosa vorrebbe liberare il sistema VM per alleviare l'attuale indice di pressione calcolato
Quindi - se stai monitorando la pressione della tua memoria con Activity monitor (o controllando i valori di sysctl a livello di codice o nella shell della riga di comando) faresti bene a guardare questi quattro valori:
sysctl -a vm | egrep "page_free|pressure"
C'è un nuovo comando memory_pressure
introdotto con Mavericks e quando lo eseguo per guidare il sottosistema di memoria in uno stato di avviso - puoi vedere l'aumento della pressione della memoria in un intervallo giallo.
Lo strumento assegnato circa 4 GB di memoria all'utensile come grafico della pressione aumentata costantemente a questo stato in cui è apparentemente graficamente il livello di "warning": sudo memory_pressure -l warn
. Come puoi vedere, il sistema prima della pressione utilizzava 5,9 GB e dopo era utilizzato fino a 7,99 GB, che non è nemmeno necessario aggiungere a causa dello scambio e della compressione.
Dopo aver visto come è stato vm_stat 15
mostrato il risultato dell'avviso in nessun paging misurabile, ho chiuso lo strumento (Control-C) e quindi ho eseguito nuovamente lo strumento per rendere critica la pressione della memoria:sudo memory_pressure -l critical
Non l'ho lasciato funzionare per più di qualche minuto mentre si avviava il paging e una volta che lo strumento diceva che avevo 5 GB di RAM paginati sul disco, non volevo riempire il mio disco ed uscire dallo strumento.
È possibile osservare la velocità con cui il sistema ha liberato la RAM dopo che l'avviso è stato terminato e anche come si è diffuso nel territorio "rosso" per mostrare che il sistema di memoria virtuale non è stato in grado di comprimere abbastanza pagine per evitare lo scambio su disco. La mia ipotesi istruita è rossa sulla pressione che indica lo scambio e l'eccessiva allocazione drammatica e / o un momento in cui le pagine libere sono inferiori alla quantità che il sistema preferisce e sta attivamente eliminando le pagine inattive e / o le pagine di scambio che dovrebbero essere utilizzate per scambiare. Allo stesso modo, il sistema recupera rapidamente una volta rilasciate le allocazioni e la pressione viene tolta dal sistema di memoria virtuale.