2011-10-24 63 views
197

Cosa sono gli RSS e i VSZ nella gestione della memoria Linux? In un ambiente multithreaded come possono entrambi essere gestiti e tracciati?Che cos'è RSS e VSZ nella gestione della memoria Linux

+0

possibile duplicato di [Informazioni sui log di Linux oom-killer] (http://stackoverflow.com/questions/9199731/understanding-the-linux-oom-killers-logs) – msangel

risposta

0

Non sono gestiti, ma misurati e possibilmente limitati (vedere la chiamata di sistema getrlimit, anche su getrlimit(2)).

RSS significa resident set size (la parte dello spazio di indirizzamento virtuale che si trova nella RAM).

è possibile interrogare il virtual address space di processo 1234 utilizzando proc(5) con cat /proc/1234/maps e il suo stato (incluso il consumo di memoria) attraverso cat /proc/1234/status

+0

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. - [Dalla recensione] (/ recensione/post di bassa qualità/18966880) – Maak

+0

Ho fornito un secondo collegamento. Uno di questi rimarrà valido –

36

RSS è Resident Set Size (memoria residente fisicamente - questo spazio è attualmente occupa nella memoria fisica della macchina), e VSZ è la dimensione della memoria virtuale (spazio di indirizzamento allocato - questo ha gli indirizzi allocati nella mappa della memoria del processo, ma al momento non c'è necessariamente una memoria vera e propria).

Si noti che in questi giorni di macchine virtuali comuni, la memoria fisica dal punto di vista della macchina potrebbe non essere realmente la memoria fisica effettiva.

+0

Mente fornendo più informazioni di ciò che l'abbreviazione rappresenta? – Pithikos

282

RSS è la dimensione del set residente e viene utilizzata per mostrare la quantità di memoria allocata per quel processo e nella RAM. Non include la memoria che viene scambiata. Include la memoria dalle librerie condivise fintanto che le pagine di quelle librerie sono effettivamente in memoria. Comprende tutto lo stack e la memoria heap.

VSZ è la dimensione della memoria virtuale. Include tutta la memoria a cui il processo può accedere, inclusa la memoria che viene scambiata e la memoria che proviene da librerie condivise.

Quindi se il processo A ha un binario 500K ed è collegato a 2500K di librerie condivise, ha 200K di allocazioni stack/heap di cui 100K sono effettivamente in memoria (il resto viene scambiato) e ha solo caricato effettivamente 1000K di condivisioni biblioteche e 400K del proprio binario allora:

RSS: 400K + 1000K + 100K = 1500K 
VSZ: 500K + 2500K + 200K = 3200K 

Dal momento che parte della memoria è condivisa, molti processi possono usarlo, quindi se si sommano tutti i valori RSS si può facilmente finire con più spazio di quanto il tuo sistema ha.

C'è anche PSS (dimensione proporzionale). Questa è una misura più recente che tiene traccia della memoria condivisa come proporzione utilizzata dal processo corrente. Quindi, se ci sono stati due processi che utilizzano la stessa libreria condivisa da prima:

PSS: 400K + (1000K/2) + 100K = 400K + 500K + 100K = 1000K 

thread Tutti condividono lo stesso spazio indirizzo, in modo che il RSS, VSZ e PSS per ogni thread è identico a tutti gli altri thread nel processo . Usa ps o top per visualizzare queste informazioni in linux/unix.

Non c'è modo più ad esso che questo, per saperne di più controllare i seguenti riferimenti:

Vedi anche:

+8

Credo che l'RSS * includa la memoria da librerie collegate dinamicamente. Se ci sono 3 processi usando 'libxml2.so', la libreria condivisa verrà conteggiata in ciascuno dei loro RSS, quindi la somma del loro RSS sarà maggiore della memoria effettiva utilizzata. – nfm

+1

Questo è corretto. Ho risolto la mia risposta, grazie per l'avviso. – jmh

+0

Sono su ubuntu 16.04, e c'è un processo java con 1.2G RES e 4.5G VIRT visualizzati dal comando 'top'. Questo sistema non ha scambio, 'swapon --show' non restituisce nulla. Come lo spieghi? Se vsz è swap + librerie condivise, in questo caso, le librerie condivise sono superiori a 3,3 G? È possibile? Solo molto confuso ... –

1

Penso che sia già stato detto molto su RSS vs VSZ. Dal punto di vista di un amministratore/programmatore/utente, quando disegno/codice le applicazioni sono più preoccupato per l'RSZ, (memoria residente), come e quando continuate a tirare sempre più variabili (ammucchiate) vedrete aumentare questo valore. Prova un semplice programma per costruire l'allocazione dello spazio basata su malloc in loop e assicurati di riempire i dati in quello spazio malloc'd. RSS continua a salire. Per quanto riguarda VSZ, è più di una mappatura della memoria virtuale che fa Linux, e una delle sue caratteristiche principali derivate da concetti convenzionali del sistema operativo. La gestione di VSZ viene eseguita dalla gestione della memoria virtuale del kernel, per maggiori informazioni su VSZ, vedere la descrizione di Robert Love su mm_struct e vm_struct, che fanno parte della struttura di base task_struct nel kernel.

Problemi correlati