La memoria inattiva non è uno spreco di risorse?


87

Sto cercando una spiegazione dell'utilizzo della memoria sulla mia macchina, soprattutto alla luce dell'esempio in questa schermata di seguito:

Utilizzo della memoria

Capisco cos'è Freee Activesignifica
Ma quali sono i significati di Wirede Inactive?

Soprattutto inactive, perché usa così tanta memoria per qualcosa che non usiamo?

Risposte:


142

La memoria inattiva ha avuto un orribile rap a causa di un nome scadente. Avrebbe dovuto essere chiamato qualcosa come "rendere il tuo Mac davvero veloce la seconda, la terza e la quarta volta che fa lo stesso compito", tranne che è anche un nome terribile.

Apple ha riscritto il monitor delle attività quando ha introdotto diverse nuove funzionalità e aggiunto memoria compressa, quindi alcune di queste non si applicano più a macOS che non mostrano "Memoria inattiva", ma questo vale ancora per la gestione della memoria di Mac OS X come documentato a questo proposito. versione di Activity Monitor: https://support.apple.com/en-us/HT201538

Ecco come ho spiegato le cose a qualcuno di nuovo sul concetto di memoria virtuale su OS X:

  • Cablato : il sistema non può funzionare senza questa quantità di RAM (mai scambiato)
  • Attivo: i programmi utilizzano davvero questa memoria ora o negli ultimi secondi
  • Inattivo: cose che i programmi hanno letto dal disco lento o altrove e hanno affermato di non aver mai più bisogno. Gli ingegneri lo sanno meglio, tornerai su Facebook in pochi minuti o riavvierai Word dopo averlo lasciato. Le stesse cose accadono ancora e ancora sui computer.
  • Gratuito: RAM totalmente sprecata : il sistema richiede solo uno o due MB gratuiti per coprire le richieste di allocazione a breve termine. Per le allocazioni più grandi, utilizza semplicemente parte della RAM inattiva allocandola in attivo / cablato e rimuovendo le informazioni su ciò che era in possesso.

Il problema sorge quando Free + Inactive è inferiore a circa 1/3 del totale e quindi le cose possono davvero rallentare.

La memoria inattiva è la velocità bonus / RAM a doppio servizio. Serve come gratuito in un momento, ma rende anche le attività ripetute molto, molto più veloci se il sistema ha indovinato correttamente e conservato qualcosa nella RAM che farai di nuovo. È più veloce della memoria scambiata poiché è già caricato nella RAM e accelera le cose quando il sistema di memoria virtuale fa buone ipotesi.

Quando ti stai chiedendo se la RAM è un problema, piuttosto che guardare ciascuna delle 4 categorie (5 se conti lo scambio attivo), puoi accoppiare W + A come rallentare un nuovo programma / attività e F + I come accelerare un nuovo programma / compito. Più F + I hai, più nuovi programmi puoi avviare prima che la RAM debba fare affidamento sullo scambio per destreggiarsi tra la memoria che è stata allocata.

Non hai davvero bisogno di sapere come funziona lo scambio da quando l'ho menzionato sopra. Fondamentalmente, quando un programma è inattivo e non è stato usato per giorni (o ore) il sistema scriverà quella RAM sul disco rigido invece di uccidere il programma. Ciò consente al sistema di mescolare e gestire tutti i tipi di cose relative alla gestione della memoria e impedisce a ciascun programma di parlare tra loro per concordare chi utilizzerà meno memoria quando il sistema si esaurisce.

Ecco un esempio del mondo reale di come viene utilizzata la RAM inattiva.

  1. Esci da tutte le app e assicurati che le due app che stiamo testando non siano impostate per l'avvio automatico al momento dell'accesso
  2. Riavvia il tuo Mac
  3. Avvia il tuo Activity Monitor e guarda tutta la RAM
  4. Tempo impiegato per avviare l'applicazione A (MS Word sarebbe una buona scelta)
  5. Esci A
  6. Tempo quanto tempo impiega per avviare l'applicazione B (Adobe sarebbe anche qualcosa di buono)
  7. Esci B
  8. Tempo impiegato dal secondo lancio di A
  9. Esci A
  10. Secondo lancio di Time B.
  11. Il tempo A inizia la terza volta con B in esecuzione.

Dovresti vedere accelerazioni drammatiche per il secondo / terzo avvio mentre il sistema impara a mantenere in RAM inattiva le cose che queste due app devono eseguire.


Nel tuo caso - il totale di Wired e Active significa che probabilmente sta succedendo qualche scambio su disco e il tuo Mac non è così veloce come potrebbe essere poiché la tua RAM inattiva non è abbastanza grande per archiviare tutto ciò che potrebbe essere necessario riutilizzare . Se hai un disco SSD veloce, questa allocazione RAM è OK e invece di iniziare a rallentare una volta meno di 1/2 della tua RAM è F + I, puoi tagliare le cose più vicino a come 1/4 della RAM totale per F + I prima di vedere una notevole lentezza. Queste linee guida sono generali e ti consigliamo di guardare vm_stat 15o un intervallo simile per assicurarti che lo scambio di volume continuo e medio non rallenti il ​​tuo Mac.


9
Wow risposta molto completa per i nuovi arrivati ​​come me. Grazie mille, molto apprezzato :)
GusDeCooL

6
Sì, posso rispondere per tutti: una volta per tutte, le persone possono modificarlo per renderlo migliore e tu ottieni la tua risposta. Un'idea davvero interessante per un sito web in cui le persone possono venire e porre domande interessanti. :-)
bmike

3
Wow! Bella risposta!
duci9y,

3
Vorrei che lo spiegassero così nella mia classe OS.
styfle

2
L'eliminazione di @cvsguimaraes non è istantanea; chat.stackexchange.com/transcript/message/12107920#12107920
Graham Perrin

6

Il numero che è il più importante nel determinare se il tuo Mac sta "stressando" la memoria è la figura "Pagine esaurite". In Activity Monitor in Mavericks questo non viene più visualizzato, ora mostrano le informazioni in "Scambia usato:".

Pagina esaurita significa che il sistema operativo ha determinato che non c'è abbastanza RAM disponibile per eseguire tutte le applicazioni e i processi che sono stati richiesti. Ciò che fa allora è "pagine" su parti del disco della memoria che determina che non vengono utilizzate attivamente. Ciò significa che la memoria RAM (veloce) viene modificata in memoria HDD (lenta). Se ciò accade molto perché ci sono molte applicazioni in esecuzione e l'utente sta passando da un'applicazione all'altra, allora ci saranno molte pagine in uscita e pagine in entrata.

Se vedi aumentare le pagine, allora dovresti agire.


4

Il problema sul mio Mac è che la memoria "inattiva" non viene mai eliminata se non eseguo un'eliminazione manuale nella finestra di comando. Si accumula e si accumula fino a quando non appare una finestra popup che mi dice di uccidere le applicazioni. Anche dopo aver ucciso tutte le mie applicazioni, ho ancora troppa memoria inattiva per eseguire qualsiasi cosa. Quindi, sul mio Mac con l'ultima versione di Mountain Lion NON è vero che la memoria inattiva viene recuperata quando la memoria libera si esaurisce. O ho un'app da qualche parte che ha bloccato un pezzo di memoria inattiva che non viene mai liberata, o iOS ha un bug al suo interno. (Ho 8 GB di memoria fisica ... dovrebbe essere abbastanza!)


2
Sono con te, Ernie ... in Mac OS 10.6 e 10.7 su MacBook Pro e Mac Pro, la memoria inattiva si insinuerà e il sistema operativo inizierà a scambiarsi (in base a "Pagina Ins" e "Pagina Out") e il sistema eseguirà la scansione fino all'arresto. La memoria inattiva sembra non essere mai recuperata. Devo usare "purge" per recuperare la memoria inattiva e riaccendere il mio sistema.
Eric

2
Da dove viene questa finestra popup? Qual è la situazione della memoria riportata da vm_statquando si verifica? Cosa ti rende così sicuro che ci può essere "troppa" memoria inattiva "per eseguire qualsiasi cosa"? Per quanto mi riguarda, questo è tutto sentito che non ha alcun supporto nel codice che conosci, in realtà viene eseguito nel kernel.
Kuba Ober,

2
La tua allocazione di memoria assomiglia a qualcosa che Gus ha presentato? Qui stiamo parlando di un gigabyte cablato e un gigabyte e mezzo attivo. La razione inattiva / libera mi sta bene in questa situazione. Forse faresti una seconda domanda in dettaglio la situazione in cui le cose si stanno rompendo?
bmike

2

Grazie a tutti i poster e i commentatori, questo è stato un filo istruttivo e utile per me. La mia recente esperienza potrebbe essere utile a qualcuno. Uso il mio Mac Mini con OS X10.8.1 e con RAM 16G interamente per il software di prototipazione che verrà eseguito altrove. Posso assicurarti che non "tornerò su Facebook tra qualche minuto o rilancio di Word dopo averlo lasciato" - invece lo faccio sul mio macbook.

Il mio compito era quello di raccogliere una grande quantità di dati, l'I / O richiede molto tempo, quindi l'idea è quella di leggere una grande quantità di dati per eseguire il ram su un colpo solo, elaborarli lì e quindi riscriverli su disco , quindi ripetere il processo fino al termine, che richiede alcune ore. Quello che vedo è che ogni volta che leggo un nuovo blocco di dati, la memoria inattiva salta - suppongo che l'IA del sistema presuma che potrei voler usare di nuovo il vecchio blocco, cosa che non faccio - e il libero gocce di memoria.

Dopo alcune iterazioni di questo processo, la memoria libera si riduce a pochi MB, la memoria inattiva libererà qualche MB in più e, infine, dopo alcuni minuti di gioco tra memoria libera e inattiva, la memoria inattiva si libererà alcuni GB alla volta. Tutto è come descrive @bmike, e sia vm_stat 15 che Activity monitor mostrano 0 pagine esaurite.

Tranne forse non del tutto. Diverse volte le cose si sono spostate lentamente, mi dirigo a prendere un caffè o una cena e non sto monitorando il processo, e cosa non dovrebbe accadere e il processo improvvisamente getta via un carico di pagine e rallenta. Stipula che probabilmente è il mio codice schifoso che sta causando il problema, ma vorrei poter disattivare la memoria inattiva solo per eliminare quella fonte di variabilità. È rotto? Non lo direi affatto, ma direi che suppongo che la gestione della memoria non sia ottimizzata per il mio caso d'uso.


0

Memoria inattiva utilizzata dalle app recentemente attive e chiuse. OS X lo mantiene riservato nel caso in cui l'utente desideri riaprire il programma. In questo caso, OS X non ha bisogno di spostare la memoria che accelera la velocità delle prestazioni. Se non si riapre il programma, dopo un po 'la memoria dell'inattivo verrà liberata o spostata. (C)

Questa funzione è interessante quando hai molta RAM, ma quando non lo è è abbastanza fastidiosa. In realtà si tratta solo di cose di mele. Quando hai un potente gadget o un Mac, tutto va bene, ma quando il tuo dispositivo diventa più grande, tutte le funzionalità lo rallentano.

Quindi devi usare trucchi speciali per gestirlo.

Per la memoria inattiva è disponibile un comando purgeper liberarla.


-3

Fondamentalmente è rotto. La RAM inattiva deve essere "eliminata" automaticamente quando la RAM libera è bassa. Qual è il punto di trattenere la RAM per le applicazioni precedentemente aperte nella speranza che l'utente la riapra? Il fatto che la RAM disponibile sia insufficiente indica che le applicazioni ATTIVE esistenti potrebbero non avere abbastanza RAM e si scambiano ORA. Mantenere GB di RAM per applicazioni chiuse è semplicemente stupido. Secondo la descrizione di Apple, la RAM inattiva dovrebbe essere eliminata o presa in prestito automaticamente quando la RAM libera è bassa. Questo chiaramente non è il caso.


3
I sistemi di memoria virtuale fanno sprecare grandi quantità di RAM libera. Quando un programma richiede un'allocazione di memoria, il kernel crea più memoria virtuale e la distribuisce come caramella. Solo quando un programma riempie quella memoria di dati effettivi, il sistema deve fare spazio nella RAM per tale operazione. Quel "fare spazio" si allontana dalla memoria libera e quindi inattiva - e il ritardo nel rilascio della memoria inattiva è incommensurabilmente piccolo. L'eliminazione che descrivi è esattamente ciò che accade: solo il fatto che tu implichi che il sistema dovrebbe fare in modo che l'eliminazione funzioni in anticipo quando il sistema è pigro e funziona solo se necessario.
bmike

@bmike Ma non significherebbe che quando non rimarrà RAM libera e avvierò una nuova App, la porzione di RAM inattiva diminuirà e aumenterebbe attiva? Questo non è chiaramente il caso e dalla mia esperienza il sistema diventa estremamente lento ogni volta che non ci sono più ram liberi, nonostante ci siano gigabyte di ram inattivi. Il sistema sembra preferire lo scambio del disco prima di considerare il riutilizzo di RAM inattiva.
codingFriend1

4
@ codingFriend1 Precisiamo: quante pagine libere vm_statconsideri "niente più RAM libera"? Quando il Mac è "lento", a cosa servono le pagine in entrata e in uscita vm_stat 1? Ogni volta che lo guardo su un sistema problematico, mi piace vm_stat 15correre in una finestra del terminale (o accedere al filesystem) in modo da sapere esattamente quale sia l'attività di paging quando decido se / quando sintonizzerò cose come il cercapersone. Questo esempio ha 100 MB di RAM libera, quindi probabilmente non è nemmeno sotto pressione di paginazione.
bmike

-4

La memoria inattiva, in sostanza, rende più rapida l'apertura di processi precedentemente chiusi. Se scopri che Mac OS sta occupando troppa memoria di cui non hai davvero bisogno, come dalle dozzine di schede che hai aperto su Safari o Chrome, usa semplicemente il comando 'purge' nel Terminale. In OS X Mavericks basta usare 'sudo purge' invece (dovrai inserire la tua password). Si rade preziosi secondi quando è necessario riaprire qualcosa, ma se si desidera giocare a un gioco ad alta intensità di RAM o aprire un'applicazione affamata di RAM, consiglio vivamente di usare il comando purge.


2
In cosa differisce dalle altre risposte?
user151019,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.