La pressione di memoria non è un semplice indicatore di percentuale di memoria libera e sembra essere un grafico da 0 a 100%. Il valore sysctl
di vm.memory_pressure
viene calcolato in relazione a un target calcolato che tiene traccia del rapporto tra pagine di memoria libere e inattive nelle pagine cablate e attive. I contatori assoluti sono visualizzati utilizzando lo strumento della riga di comando vm_stat
per ispezionare l'allocazione dettagliata della memoria virtuale. Jonathan Levin ha una documentazione eccellente sul link che copre sia la memoria virtuale di macOS e iOS sia il modo in cui calcolano la pressione della memoria e le azioni intraprese quando l'indice di pressione è alto.
La memoria virtuale rilevante (vm) che alimenta il calcolo di vm.memory_pressure
è:
-
vm.page_free_count
- un conteggio assoluto di pagine libere
-
vm.vm_page_free_target
: un obiettivo o un obiettivo calcolato per una situazione "senza pressione"
-
vm.page_free_wanted
- ciò che il sistema vm vorrebbe liberare per alleviare l'attuale indice di pressione calcolato
Quindi, se stai monitorando la pressione della memoria con il monitor Attività (o se controllo i valori di sysctl a livello di programmazione o sulla 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.
Lostrumentohaallocatocirca4GBdimemoriaallostrumentomentreilgraficodellapressioneaumentavacostantementeinquestostatoincuiapparentementeillivellodi"avvertimento" è rappresentato: sudo memory_pressure -l warn
. Come potete vedere, il sistema prima della pressione aveva 5,9 GB utilizzati e dopo era utilizzato fino a 7,99 GB, che non ha nemmeno bisogno di aggiungere a causa dello scambio e della compressione.
Dopo aver visto come vm_stat 15
ha mostrato il risultato dell'avviso senza paginazione misurabile, ho chiuso lo strumento (Control-C) e poi ho ripetuto lo strumento per rendere critica la pressione della memoria: sudo memory_pressure -l critical
Non l'ho lasciato funzionare per più di qualche minuto con l'inizio del paging e una volta che lo strumento diceva che avevo 5 GB di RAM pagati su disco, non volevo riempire il mio disco e chiudere lo strumento.
ÈpossibileosservarelarapiditàconcuiilsistemahaliberatolaRAMdopolafinedell'avvisoeancheilmodoincuièpassatoalterritorio"rosso" per dimostrare che il sistema di memoria virtuale non è in grado di comprimere un numero di pagine sufficiente a evitare lo swap su disco. La mia supposizione istruita è rossa sulla pressione indica swapping e drammatica sovra-allocazione e / o un tempo in cui le pagine libere sono al di sotto della quantità che il sistema preferisce e sta eliminando attivamente pagine inattive e / o scambiando le pagine che ci si aspetta vengano scambiate. Allo stesso modo, il sistema recupera rapidamente una volta che le allocazioni sono state rilasciate e la pressione viene rimossa dal sistema di memoria virtuale.