Perché OS X usa lo swap quando c'è molta "memoria inattiva"?


21

Sto usando OS X da pochi mesi (Lion e ora Mountain Lion). Ho 8 GB sul mio mini e quasi quotidianamente si avvicina a quello. Su Windows 7 con 8 GB non ho mai avuto questo tipo di problema. Comunque, ho letto sulla rete, che la memoria inattiva è la cache delle app dei programmi che sono stati chiusi di recente e possono essere utilizzati per una riapertura più veloce. E questa memoria inattiva può essere rilasciata in una nuova app, se necessario. Non è stato rilasciato. Invece OS X inizia lo scambio. Quindi la mia domanda è: perché OS X usa lo swap quando c'è molta "memoria inattiva"? Ecco una schermata che mostra cosa intendo:

enter image description here

Spero davvero che ci sia una via per far sì che OS X usi quei 2,69 GB prima di iniziare lo scambio. Lo faccio davvero.


Sì, è strano. È un'applicazione che occupa tutta la RAM? Forse OSX limita le applicazioni a non utilizzare più dell'80% di RAM in una volta. Inattivo non significa che sia libero. È riservato a qualcosa.
ppumkin

No - molte app, browser, Eclipse ed ecc. Da quello che ho letto è gratuito poiché è una cache delle app chiusa di recente. Ci dovrebbe essere modo di rendere OS X non in scambio quando c'è una memoria inattiva
Balchev

Posso riprodurlo in qualsiasi momento e posso creare uno schermo del monitor dell'attività, se necessario
Balchev

2
La memoria non attiva non è una memoria libera.
kinokijuf

2
@kinokijuf dovrebbe, tuttavia, agire come memoria libera quando non rimane memoria libera. Se la memoria non attiva è sempre scambiata su disco, non c'è alcun punto nel fare la distinzione attivo - inattivo.
Pieter

Risposte:


17

Apparentemente lo swapping è accaduto quando le pagine RAM inattive erano effettivamente attive.

( Aggiornare: come è stato chiarito in un commento, questo non è il tuo caso. Quindi le persone con lo stesso problema possono salta in avanti alla regola orizzontale .)

Cioè hai avuto molti programmi in esecuzione e il kernel ha scambiato alcune pagine. Quindi hai abbandonato alcuni programmi. Il kernel contrassegna le proprie pagine RAM come inattive. Ma non rimpiazzerà le pagine nella RAM finché non saranno necessarie queste pagine. Ciò si traduce in avere pagine sia inattive che scambiate.

Perché non scambiare preventivamente le pagine? Perché quello sarebbe scommettere contro le probabilità: nel lungo periodo perdi. Pensiamo ad un esempio semplificato: due programmi A e B che non si adattano alla RAM contemporaneamente. Il programma A è ancora in esecuzione e tutte le pagine sostituite appartengono a A. Il programma B è stato abbandonato e tutte le pagine inattive appartengono a B.

Se il kernel scambia preventivamente-in pagine A e immediatamente dopo:

  • il programma A deve accedere alle sue pagine - & gt; Vinci - le pagine sono già nella RAM.
  • lanci di nuovo B - & gt; Perdi - hai "pagato" il costo per portare le pagine in RAM e ora devi rimandarle indietro.
  • lanci un altro programma C - & gt; Si perde se A e C non si adattano nella RAM allo stesso tempo. Se si adattano, sei pari.

Tenere anche conto del fatto che lo swapping-out (scrittura su disco) è più costoso dello swapping-in (lettura dal disco). Il che rende questa "scommessa" ancora più poco attraente.

In breve: fidati del tuo kernel e non cercare di superarlo.


Aggiornare: Risulta che la memoria inattiva non funziona come Utilizzo di Activity Monitor per leggere la memoria di sistema l'articolo ha portato molte persone a credere che funzioni. La definizione fornita nell'articolo per la memoria non attiva è corretta:

Questa informazione è nella RAM ma non viene utilizzata attivamente, lo è stata   usato di recente.

Ma il seguente esempio è totalmente fuorviante e troppo semplificato (come il mio esempio per essere sincero):

Ad esempio, se hai utilizzato Mail e poi lo hai chiuso, la RAM è quella   La posta utilizzata era contrassegnata come memoria non attiva. La memoria inattiva è   disponibile per l'uso da un'altra applicazione, proprio come la memoria libera.   Tuttavia, se si apre Mail prima che la sua memoria inattiva venga utilizzata da a   applicazione diversa, Mail si aprirà più rapidamente perché è inattivo   la memoria viene convertita in memoria attiva, invece di caricarla dal   guida più lenta.

Ho cercato più risorse online e ho finito per questo thread nella mailing list del kernel di darwin che è piuttosto informativo. Citando Jim Magee (dal team di Darwin - Penso):

In breve, il sistema VM del kernel quando si gestiscono le scansioni della pressione della memoria   attraverso le pagine in uso e cerca di mantenerli in equilibrio tra   marcature attive e inattive. Le pagine inattive vengono scansionate per essere riutilizzate   mentre contrassegnato come inattivo. Se sono stati riutilizzati, sono contrassegnati come   attivo e qualche altra pagina deve passare dallo stato attivo a quello inattivo a   rilevare se è in uso attivo. Quindi, inattivo è un termine improprio. È   abbreviazione di "possibilmente inattivo, proviamo a verificarlo".

Come hai scoperto, il bilanciamento interno per cui (attualmente) ci battiamo è   circa 2/3 attivo vs 1/3 inattivo ...

Questo spiega il comportamento che osservi. Cioè le pagine inattive che vedi appartengono a programmi in esecuzione che non sono stati usati di recente. Quindi, quando si attiva un nuovo programma, le pagine inattive vengono scambiate. Allo stesso tempo, le pagine di altri programmi sono contrassegnate come inattive per mantenere il rapporto 2/1 tra attivo e inattivo.

Il filo contiene anche alcuni suggerimenti per saperne di più sugli interni di darwin. Ci sono anche alcuni suggerimenti nel caso in cui hai iniziato a studiare l'utilizzo della memoria a causa di problemi di beachball (che di solito hanno poco a che fare con esso).

La conclusione è la stessa: fidati del tuo kernel e non cercare di superarlo. :-)


1
Ciao, non sono sicuro che tu mi capisca - sto parlando per il momento in cui ti piace 100-200 MB di memoria libera, 2.6 GB di "inattivo" e avvia un altro programma, diciamo eclissi, xcode e così via. Quello che succede è che non li usa 2,6 GB e scambiare invece dalla memoria attiva. Non è sicuro se capisci cosa intendo. Comunque, grazie per la tua risposta
Balchev

Questo è chiaro ora. Forse dovresti aggiungere l'esempio in questo commento alla tua domanda. Ho aggiunto ulteriori informazioni che a mio avviso forniscono una spiegazione adeguata per ciò che osservate.
m000

Non sono sicuro di dover modificare la mia risposta originale. Spiega un caso diverso (dato che non ho ricevuto la tua domanda prima del tuo commento) e potrebbe confondere le persone.
m000

Così come dice Radoo nel suo commento: "OS X è una bestia affamata". Non mi aspettavo che OS X fosse tanto affamato di memoria (sia Lion che ora Mountain Lion) ed è per questo che ho pensato che ci fosse qualcosa di sospetto qui. Grazie per la tua risposta aggiornata.
Balchev

5

Puoi disabilitare il paging in sicurezza se hai abbastanza RAM.

Prova questi comandi.

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
sudo rm /private/var/vm/swapfile*

Quindi riavviare e verificare che il processo dynamic_pager non sia più in esecuzione.

Assicurati che non siano stati creati file di scambio /private/var/vm/.

Per riattivare provare i seguenti comandi:

sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist

Puoi anche disattivare Spotlight per liberare più RAM e ridurre l'attività del disco. I seguenti comandi sono usati per disabilitare e abilitare Spotlight.

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist
sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.metadata.mds.plist

Ho letto sulla rete che disabilitare lo swap su OSX può portare a comportamenti imprevisti del sistema e crash. È vero?
Balchev

Quando la tua memoria è bassa lo farà. Ma se hai abbastanza memoria, come 8 GB, non causerà alcun problema.
arundevma

2
"Abbastanza memoria, come 8 GB" - scusa, è così carino ... :)
Bombe

1

Il sistema funziona come progettato. Anche quando non c'è pressione di memoria, può avere senso scrivere alcune pagine che non possono essere scartate ma che non sono state usate di recente per scambiare quando il sistema non è occupato. In questo modo, se c'è una pressione della memoria in seguito, queste pagine possono essere sfrattate dalla RAM senza dover prima scriverle per lo scambio mentre il sistema è occupato.


è mal progettato quindi. è troppo aggressivo nell'assegnare e utilizzare lo spazio di swap.
mendota

Perchè importa? Se c'è molto scambio gratuito, allocare lo spazio di swap è innocuo. Ciò è particolarmente vero quando lo swap non contiene i dati necessari perché la rimozione delle allocazioni non ha alcun costo. Questo è un buon progetto - fare un duro lavoro quando è quasi senza costi piuttosto che rimandarlo a più tardi quando il sistema è sotto pressione.
David Schwartz

è un cattivo design quando è troppo aggressivo e causa la balbuzie o rotture nei programmi erroneamente taggati come inattivi e inizia a spostarsi in swap. nel frattempo ci sono altri otto concerti gratuiti in RAM: /
mendota

0

Non c'è molto che tu possa fare. Perché lo fa? Perché è solo il modo in cui OS X funziona. La parte interessante è come la memoria occupata sta diventando più grande con ogni sonno che il Mac ottiene.

Cosa sai fare:

  1. Aggiorna RAM.
  2. Corri il santo " epurazione "Comando per cancellare gran parte della memoria inattiva, ogni volta che è necessario.
  3. Disabilita lo scambio http://osxdaily.com/2010/10/08/mac-virtual-memory-swap/

Ciao, ho usato il comando di eliminazione, ma il più delle volte è libero meno della metà della memoria "inattiva". Ho letto che disabilitare lo swap su OSX può portare a comportamenti imprevisti del sistema e crash.So andato con 1) Ora va bene con 16 GB :) Solo quella quantità di memoria utilizzata per i server, non i desktop :) Grazie per la tua risposta
Balchev

Ho 16 GB sul mio Macbook Pro, che non è un server. :) È risaputo che OS X è una bestia affamata quando si tratta di memoria, soprattutto quando vengono usate più app medio / grandi contemporaneamente. Sono riuscito a riempire tutti quei 16 GB senza aprire alcun software di editing di immagini / video, solo alcuni giochi e piccole app. La memoria inattiva era di circa 4 GB ...

È inoltre necessario tenere conto del fatto che molte delle app OS X sono già a 64 bit. Le app a 64 bit allocano più memoria rispetto alle app a 32 bit, a causa dell'incremento dello spazio degli indirizzi.
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.