Un fenomeno comune nel mio uso quotidiano (e molti altri secondo vari post su Internet) di OS X, il sistema sembra rallentare ogni volta che non c'è più memoria "libera" disponibile. Presumibilmente, ciò è dovuto allo scambio, poiché è evidente un'intensa attività su disco e che vm_stat riporta molte pagine. (Correggimi dall'errore)
Tuttavia, la quantità di RAM "Inattivo" è in genere intorno al 12,5% -25% di tutta la memoria disponibile (^ 1.) Quando inizia / si verifica / termina lo scambio.
Secondo http://support.apple.com/kb/ht1342 :
Memoria inattiva
Queste informazioni in memoria non vengono utilizzate attivamente, ma sono state utilizzate di recente.
Ad esempio, se hai utilizzato Mail e poi lo hai chiuso, la RAM utilizzata da Mail è contrassegnata come memoria inattiva. Questa 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 un'altra applicazione, Mail si aprirà più rapidamente perché la sua memoria inattiva viene convertita in memoria attiva, invece di caricare Mail dal disco rigido più lento.
L'elenco inattivo contiene pagine attualmente residenti nella memoria fisica ma a cui non è stato effettuato l'accesso di recente. Queste pagine contengono dati validi ma possono essere rilasciate dalla memoria in qualsiasi momento .
Quindi, in sostanza: quando un programma viene chiuso, la sua memoria viene contrassegnata come Inattiva e dovrebbe essere rivendicabile in qualsiasi momento. Tuttavia, OS X preferirà iniziare a scambiare la memoria con il file Swap invece di rivendicare questa memoria, ogni volta che la memoria "Libera" si esaurisce.
Perché? Qual è il vantaggio di questo comportamento rispetto, ad esempio, al rilascio immediato della memoria inattiva e nemmeno il tocco del file di scambio? Alcune fonti (^ 2.) Indicano che OS X eseguirà lo swap della memoria "Inattiva" prima di rilasciarla, ma non ha senso adesso se la memoria può essere rilasciata dalla memoria in qualsiasi momento ? Lo scambio è costoso, il rilascio è economico, giusto?
Questo comportamento può essere modificato utilizzando una preferenza o un hack noto? (Preferibilmente uno che non include la disabilitazione totale di swap / dynamic_pager e il riavvio ...)
Apprezzo il comando purge , così come il concetto di riparazione dei permessi del disco per forzare un po 'di memoria libera, ma quelli sono modi per forzare dolorosamente più memoria libera che per riparare effettivamente la logica di decisione di scambio / rilascio ...
Tra l'altro una domanda simile è stata posta qui: http://forums.macnn.com/90/mac-os-x/434650/why-does-os-x-swap-when/ e qui: http: //hintsforums.macworld .com / showthread.php? t = 87688 ma anche se gli OP hanno ripreso la domanda principale, nessuna delle risposte risponde a una risposta ...
^ 1. AGGIORNAMENTO 17-mar-2012 Da quando ho pubblicato questa domanda per la prima volta, sono passato da 4 GB a 8 GB di RAM installata e il problema persiste. La quantità di ram "Inattivo" era 0,5 gb-1,0 gb prima e ora è in genere intorno a 1,0-2,0 GB quando inizia / si verifica / termina lo scambio, ovvero sembra che circa il 12,5% -25% del ram sia conservato come inattivo da osx logica del kernel.
^ 2. Ad esempio https://apple.stackexchange.com/questions/4288/what-does-it-mean-if-i-have-lots-of-inactive-memory-at-the-end-of-a-work- giorno :
Una volta utilizzata tutta la memoria (la memoria disponibile è 0), il sistema operativo scriverà la memoria inattiva nel file di scambio per creare più spazio nella memoria attiva.
AGGIORNAMENTO 17-mar-2012
Ecco un riepilogo dei metodi che sono stati suggeriti per aiutare finora:
Il comando di eliminazione
"Utilizzato per approssimare le condizioni di avvio iniziali con una cache del buffer del disco freddo per l'analisi delle prestazioni. Non influisce sulla memoria anonima che è stata allocata tramite malloc, vm_allocate, ecc.".
Ciò è utile per impedire a osx di scambiare la cache del disco (il che è ridicolo che osx lo faccia effettivamente in primo luogo), ma con il rovescio della medaglia che la cache del disco viene rilasciata, il che significa che se la cache del disco non stava per essere Scambiato, si finirebbe semplicemente con una cache del buffer del disco freddo, probabilmente influendo negativamente sulle prestazioni.
L' app FreeMemory e / o le autorizzazioni di riparazione del disco per forzare un po 'di memoria libera
Non aiuta a liberare memoria, spostando solo alcuni gigabyte di contenuto di memoria da ram a hd. Alla fine, questo provoca molti swap-in quando tento di utilizzare le applicazioni che erano aperte mentre liberavo memoria, poiché molti dei suoi VM sono ora in scambio.
Accelerare l'allocazione degli swap utilizzando dynamicpagerwrapper
Sembra una buona cosa da fare per accelerare l'utilizzo dello swap, ma non affronta il problema dello scambio di osx in primo luogo mentre c'è ancora memoria inattiva.
Disabilitare lo scambio disabilitando dynamicpager e riavviando
Ciò costringerà osx a non utilizzare lo swap al prezzo del sistema in sospeso quando viene utilizzata tutta la memoria. Non è una valida alternativa ...
Disabilitazione dello scambio tramite un DynamicPager compromesso
Simile alla disabilitazione di dynamicpager sopra, alcuni estratti dai commenti al post sul blog indicano che questa non è una soluzione praticabile: "La memoria inattiva è alta come al solito". "quando il sistema esaurisce la memoria, l'intero sistema operativo si blocca ...", "se si consuma tutta la quantità di memoria del mac, probabilmente la macchina si bloccherà"
Per riassumere, non sono ancora a conoscenza di un modo per disabilitare Mac OS X dall'uso dello scambio quando c'è ancora memoria "inattiva". Se non è possibile, forse almeno c'è una spiegazione da qualche parte sul perché osx preferisce scambiare la memoria che può essere rilasciata dalla memoria in qualsiasi momento ?