Cos'è la memoria di scambio?


26

Sto usando la RAM per memorizzare alcune delle mie tabelle del database e le altre sono archiviate sul disco rigido.

Oggi ho scoperto che i miei processi utilizzano la memoria di swap. Ora cos'è la memoria di swap e come posso rilevare quale processo sta utilizzando la memoria di swap e come posso impedirgli di utilizzarla?


non c'è modo di scoprire quali processi utilizzano la memoria di scambio ???

guardare il task manager di Windows (o strumenti simili) per la quantità di file di pagina utilizzata e errori di pagina.

Lo scambio non è una cosa per processo, è per l'intero sistema operativo. "vmstat" ti mostrerà informazioni sulla quantità di swap che stai utilizzando.
jrockway,

lavoro su Linux non su wimdows

ho capito il motivo di questo utilizzo di swap ..... qualcuno stava cercando di analizzare il mio sito, ecco perché tutto questo è successo senza alcuna causa da parte nostra. Grazie a tutti per le risposte mi ha aiutato molto come sempre :-)

Risposte:


41

Se si esaurisce la memoria fisica, si utilizza la memoria virtuale, che memorizza i dati in memoria sul disco. La lettura dal disco è più lenta di molti ordini di grandezza rispetto alla lettura dalla memoria, quindi rallenta tutto. (Lo scambio di dati tra memoria reale e memoria virtuale è "scambio". Lo spazio su disco è "spazio di scambio".)

Se la tua app "utilizza lo swap", devi utilizzare meno memoria o acquistare più RAM.

(Swap è utile perché le applicazioni che non vengono utilizzate possono essere archiviate su disco fino a quando non vengono utilizzate. Quindi possono essere "paginate" ed eseguite normalmente. Sebbene non sia in memoria, tuttavia, il sistema operativo può utilizzare quella memoria per qualcos'altro, come la cache del disco. Quindi è una funzione molto utile, ma se non hai abbastanza memoria fisica per eseguire il tuo programma, hai sicuramente bisogno di più memoria. Fortunatamente, la memoria è davvero molto economica in questi giorni.)


1
Per motivi di correttezza: memoria virtuale significa utilizzare indirizzi di memoria virtuale (qualcosa che è sempre abilitato in una CPU moderna, indipendentemente dalla quantità di RAM disponibile che hai) e non è direttamente correlato allo scambio (sebbene siano usati in combinazione, sono concetti sostanzialmente diversi).
fortran,

@fortran, per doppia correttezza, la memoria virtuale è il termine che Windows utilizza quando si riferisce al file di paging (swap) .
slitta il

7

Un computer ha una certa quantità di memoria fisica. Ma il più delle volte vogliamo di più. Quindi scambiamo un po 'di memoria sul disco.

Ogni volta che abbiamo bisogno di quella memoria, deve essere ricollocato nella memoria (scambiando qualche altro pezzo). Esistono algoritmi estremamente intelligenti per ridurre al minimo il ritardo, ma a volte dobbiamo ancora aspettare.

Su Windows, se si guarda il task manager, è possibile mostrare gli errori della pagina della colonna. Questo mostra il numero di volte in cui un'applicazione richiede un pezzo di memoria sul disco e deve essere scambiato. Molti errori di pagina = applicazione lenta.

Questo processo viene utilizzato su più livelli. Un riepilogo dal veloce al lento:

  • A livello di CPU, ci sono registri. Questi sono la memoria più veloce ma la quantità è limitata.
  • Inoltre sulla CPU è presente una piccola cache di memoria. Qui viene memorizzato un piccolo pezzo del programma in esecuzione per un accesso rapido. Cerca sugli algoritmi di previsione delle filiali se vuoi saperne di più.
  • A volte ci sono cache di livello 2 tra la CPU e la memoria principale.
  • Il livello successivo è la memoria principale (RAM).
  • Ultimo livello e il più lento di tutti è il disco, a volte è possibile utilizzare chiavette USB come memoria aggiuntiva.

3
cat /proc/pid/smaps

Se non si desidera utilizzare swap, non utilizzare una partizione di swap (commentare la riga in /etc/fstab), ma ciò impedirà l'avvio di un nuovo processo e farà fallire malloc se si esaurisce la memoria fisica. Non è una buona idea in generale ... non molto sicura e nemmeno molto utile, poiché il sistema operativo manterrà le hot page in memoria e cambierà su disco quelle che non vengono utilizzate di recente.

Un'altra soluzione potrebbe essere quella di hackerare il tuo database in modo da bloccare le pagine in memoria (so che si può fare, ma non potrei dirti ora esattamente come), ma comunque, è come se il tuo database usasse il proprio scambio e meccanismi di memorizzazione nella cache.

Per sapere qual è lo scambio e come funziona la memoria virtuale ... Ti consiglio di dare un'occhiata ad alcune lezioni sul sistema operativo, forse il MIT Open Courseware potrebbe essere di aiuto.


Poiché la configurazione predefinita su molte distribuzioni di Linux è di sovraccaricare la memoria, il "peggio" che accadrà è che il killer OOM inizierà i processi di sniping, molto probabilmente a partire dal DBMS (e con le tabelle "memorizzate nella RAM" che probabilmente non è un buon cosa).
symcbean,

1

Ho trovato una risposta parziale. Una memoria di scambio è uno spazio nel disco rigido del computer che verrà utilizzato dai sistemi operativi per inserire le informazioni che sono effettivamente nella RAM per liberarlo per un'altra applicazione. Questo dovrebbe essere fatto quando il sistema ha bisogno di memoria per un nuovo processo e non c'è nessuno, quindi possiamo vedere che se il nostro sistema ha molta RAM, forse non avrà bisogno di memoria SWAP.

AGGIORNARE

Per scoprire dove scambiare spazio (o memoria virtuale) puoi andare su Task Manger (CTRL + ALT + CANC) e attivare da VISUALIZZA -> COLONNE -> MEMORIA VIRTUALE. Ora calcola solo la differenza tra l'utilizzo della memoria e la memoria virtuale. Inoltre ecco un'istruzione su come visualizzarlo se stai eseguendo Vista: http://www.ehow.com/how_5067693_increase-swap-space.html


-1

Swap è lo spazio su disco rigido utilizzato come RAM. È (relativamente parlando) molto lento, ma impedisce ai computer di arrestarsi in modo anomalo quando stanno cercando di gestire più dati che la loro RAM può gestire.

Per impedire ai processi di utilizzare lo scambio, installare più RAM.


1
Se non vuoi scambiare, smetti di usare un file di paging. Ma aspettati altri problemi.

1
Non è. Scambio si muove un blocco di dati dal disco fisso nella memoria fisica. Una lettura una tantum, che normalmente è abbastanza veloce.

@xtofl la risposta non ha menzionato lo scambio, ma solo la partizione di swap, e il commento di gamecat non ha nulla a che fare con quello che hai detto? : P
RapidWebs,

-1

Se non si desidera che i processi utilizzino la memoria di scambio, è sufficiente disabilitare completamente la memoria di scambio. Sfortunatamente, se esaurisci la memoria, il kernel di Linux ucciderà alcuni dei tuoi processi in esecuzione al fine di liberare un po 'di memoria per l'uso.

Se disponi di RAM sufficiente per il tuo sistema, puoi effettivamente andare senza memoria di swap.

Ho un laptop con 768 Mb di RAM che non utilizza memoria di swap. È abbastanza buono per le mie esigenze. Ho un server con 256 Mb di RAM e non utilizzo la memoria di swap. Esegue 8 server virtuali utilizzando la virtualizzazione OpenVZ, senza problemi.

Quindi, dipende da te se hai bisogno di memoria di scambio.


COME stai eseguendo 8 VM su una macchina con solo 256 megabyte di RAM?!?
Warren,

È possibile con VZ perché la RAM non è completamente partizionata poiché le librerie comuni sono condivise tra macchine virtuali o qualcosa del genere. Quindi, 8 x 64 M non sono necessariamente 512 M. :)
sybreon,

ciò nonostante, come funziona stabilmente il dispositivo sottostante?
Warren,

Sostituendo i programmi inattivi, hai più memoria per la memorizzazione nella cache dei file. E questo accelera le cose. questa lettura una volta è di solito abbastanza veloce e ha un effetto trascurabile nel complesso. non viene utilizzato solo quando si supera il limite per quanto riguarda la RAM disponibile. Ho visto macchine con 16 GB di RAM che usano SWAP a volte.
RapidWebs,

inoltre, non consiglierei di disabilitare SWAP su un server di database. I suoi clienti o app Web non sarebbero molto contenti quando OOM uccide il back-end in una semplice operazione di backup notturna o qualcosa di simile? sarebbe più intelligente ottimizzare la cache del database in relazione all'utilizzo dell'applicazione e alla memoria disponibile. se sta già scambiando, ha bisogno di più ram o di configurare meglio il suo server DB. in caso contrario, la disabilitazione di SWAP costringerebbe OOM a uccidere il server DB ogni volta che va a scambiare. quale a giudicare dalla sua domanda, è spesso.
RapidWebs,
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.