La risposta più elementare? No. Il sistema operativo gestisce la gestione della memoria per l'utente, fornendo a un processo tutta la memoria necessaria in quanto lo richiede e non fornisce molto in termini di modifica delle prestazioni del sistema. Non aiuta molto nel cercare di capire se l'utilizzo della memoria fa parte dell'equazione sul perché i server Linux stanno superando i server Mac.
A causa della mancanza di "hackability" nel sistema di memoria virtuale, le tue migliori opzioni sono di valutare le prestazioni della memoria virtuale per vedere se è davvero il motivo per cui stai riscontrando problemi di prestazioni - il più semplice è usare vm_stat
o usare seguirlo live utilizzando vm_stat [number of seconds]
per vedere quante pagine si stanno verificando. Lo spostamento di pagine inutilizzate dalla RAM sul disco rigido ha un costo molto inferiore rispetto al recupero delle pagine dal disco rigido alla RAM. Una pagina in termini di OS X fa riferimento a 4kb di dati.
Inoltre, i processi a 32 bit (ad es. Illustrator) non possono accedere a più di 4 GB, quindi in teoria è possibile avere 2 GB liberi e avere un processo a corto di memoria se sono stati installati 6 GB.
Sia sul desktop che sui server eseguivo vm_stat 2
e controllavo l'ultima colonna, specialmente quando si verifica il ritardo di più secondi quando si passa a dire Illustrator.
Per scoprire quanto è grande lo swap, puoi controllare le dimensioni dello swap in Activity Monitor o eseguirlo du -shc /var/vm/swap* | tail -n 1
.
L'uso du -sh /var/vm
ha un avvertimento: sui laptop che hanno la modalità di ibernazione (qualsiasi cosa negli ultimi 4 anni o più recenti) potrebbe esserci sleepimage
all'incirca la dimensione di quanta memoria hai installato.
Gergo di memoria di Mac OS X:
Cablato : si riferisce al codice del kernel e simili. Memoria che non dovrebbe mai essere spostata fuori dalla RAM. Conosciuta anche come memoria residente.
Condiviso : memoria condivisa tra due o più processi. Entrambi i processi mostrerebbero questa quantità di memoria, quindi potrebbe essere un po 'fuorviante sulla quantità di memoria effettivamente utilizzata.
Reale : si tratta dell'utilizzo della memoria "reale" per un'applicazione, come riportato da task_info () - un conteggio approssimativo del numero di pagine fisiche presenti nel processo corrente. (Rsize)
Privato : questa è la memoria che un processo sta usando solo da solo, che viene utilizzato nella memoria residente. (RPRVT)
Virtuale : la quantità totale di spazio degli indirizzi nel processo mappata su qualsiasi cosa, che sia uno spazio arbitrariamente grande per variabili o altro, non equivale all'utilizzo effettivo della VM. (VSIZE)
Attivo : memoria attualmente etichettata come attiva e viene utilizzata la RAM.
Inattivo : "La memoria inattiva non viene più utilizzata ed è stata memorizzata nella cache del disco. Rimarrà nella RAM fino a quando un'altra applicazione avrà bisogno di spazio. Lasciare queste informazioni nella RAM è a tuo vantaggio se tu (o un client del tuo computer) torni ad esso più tardi. " - Guida di Mac OS X.
Gratuito : la quantità di RAM effettivamente disponibile senza dati.
La migliore documentazione che conosco (e che sono stato in grado di trovare nella ricerca di follow-up) è l' articolo sulla gestione della memoria di Apple sul sito Web degli sviluppatori.
Altre fonti utili: mailing list Darwin-dev: [ 1 ], [ 2 ] e un vecchio articolo su MacOSXHints . Inoltre Mike Ash ha pubblicato una buona presentazione per i non addetti ai lavori nel suo blog
Potrebbe essere possibile (non l'ho provato) disabilitare il sistema di memoria virtuale eseguendo sudo launchctl unload /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
e quindi riavviando in modo che dynamic_pager (il programma che esegue effettivamente l'allocazione della memoria virtuale) non si avvii. Tuttavia, poiché il sistema operativo presume che disponga di memoria virtuale, è possibile che si verifichino problemi molto, molto rapidamente. Per caricarlo eseguire il backup sudo launchctl load /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
(se necessario dalla modalità utente singolo)