In che modo le macchine virtuali possono consumare così poca RAM sul computer host fisico?


24

Sto eseguendo VirtualBox su una macchina Windows XP con 2 GB di RAM. Ho creato una macchina Ubuntu virtuale e gli ho assegnato una memoria di base di 750 MB.

Solo per metterlo alla prova, ho eseguito 20 cose contemporaneamente sulla macchina virtuale. Secondo "top" in Ubuntu, venivano utilizzati 750 mega di memoria, oltre a un notevole spazio di swap.

Tuttavia, in Task Manager di Windows, VitrualBox utilizzava solo 45.000 KB di memoria. Come ho chiesto alla macchina virtuale di fare sempre di più, l'utilizzo della CPU del processo VirtualBox è aumentato (in Windows) ma l'utilizzo della memoria è rimasto lo stesso.

In che modo una macchina virtuale che utilizza 750 MB di memoria può consumare solo 45 MB di memoria su una macchina fisica?

Suppongo che la risposta sia che la macchina virtuale non sta usando la memoria reale, ma la memoria simulata (ovvero lo spazio di scambio), ma è sicuramente scattante come se fosse in esecuzione nella RAM.

AGGIORNAMENTO: Ho giocato con perfmon come suggerito. Anche riassumendo tutto ciò che mi viene in mente, sembra ancora occupare meno di 300 mega ... quindi è ancora un mistero.

Process               VirtualBox     VirtualBox#1     Total
PoolNonpagedBytes     5,840          42,552           48,392
PoolPagedBytes        119,796        166,892          286,688
PrivateBytes          8,884,224      52,719,616       61,603,840
VirtualBytes          75,939,840     161,202,176      237,142,016
Sum                   84,949,700     214,131,236      299,080,936

Risposte:


7

Le colonne in Task Manager possono fornire cifre fuorvianti: per un uso accurato della memoria per processo, è possibile utilizzare perfmon (Performance Monitor nel Pannello di controllo) e guardare le cifre dei "byte privati".

Per mostrarlo, vai su perfmon, fai clic per aggiungere il contatore (sono un Ctrl+ Itipo di persona). L '"oggetto prestazione" sarebbe "Processo", con "Byte privati" nell'elenco dei contatori, ovviamente dovrai selezionare il processo rilevante dall'elenco a destra.


Ciao. Ci ho provato ma non ho avuto fortuna a trovare qualcosa chiamato Byte privati. Puoi fare un passo per passo?
Dggoldst

Ho aggiunto ...
Rowland Shaw,

Grazie, è molto utile Ho aggiunto l'analisi alla domanda. Non riesco ancora a capire perché non si sommi a 750 però.
Dggoldst,

Molto strano. Potrei sottolineare che PrivateBytes è un sottoinsieme di VirtualBytes (i byte virtuali sono la proporzione di spazio degli indirizzi allocata, mentre i byte privati ​​sono quella memoria che non è stata ancora liberata - è possibile ottenere la frammentazione della memoria con una piccola perdita di memoria, e avere le applicazioni muoiono con memoria insufficiente, anche quando ce ne sono molte disponibili). È possibile che il driver di virtualizzazione stia allocando la memoria in un modo che non verrà visualizzato, il che avrebbe senso in quanto la memoria dovrebbe essere immune dal paging su disco.
Rowland Shaw,

Dei quattro contatori inseriti nella tabella, solo "PoolNonPagedBytes" è un conteggio di memoria virtuale non pagabile, quindi verrà utilizzata tale quantità di memoria fisica. Gli altri sono tutti virtuali. Come qualsiasi altra dimensione di memoria virtuale, la RAM effettiva che utilizza è quasi sempre molto meno, questo è uno dei punti di memoria virtuale.
Jamie Hanrahan,

5

Con alcune soluzioni di virtualizzazione sotto Linux, il modo in cui allocano la memoria lo fa apparire al kernel host come un file speciale mappato in memoria (molto simile al /proc/kcorefile speciale), quindi viene conteggiato nel conteggio "memorizzato nella cache" nell'output free, non nel conteggio "usato".

Presumo che qualcosa di simile stia accadendo nel tuo ambiente Windows: i 45 Mb verranno utilizzati dai processi di gestione di VirtualBox e i 750 allocati alla VM stessa verranno conteggiati altrove.


0

Potrebbe essere memoria virtuale, file mappati in memoria o qualcosa di simile.

Hai provato a visualizzare altre colonne in Task Manager?


0

Non credere a Task manager. Non riesce a vedere tutto.

Questo problema si riscontra più comunemente con SQL Server, ad esempio con Sql, non ho mai trovato nessuno che mi dicesse un modo per ottenere informazioni accurate da Task Manager che mi indurrebbe a pensare che la figura non sia nascosta in uno dei altre colonne.

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.