¿Cómo pueden las máquinas virtuales consumir tan poca RAM en la máquina host física?


24

Estoy ejecutando VirtualBox en una máquina con Windows XP con 2 GB de RAM. Creé una máquina virtual de Ubuntu y le asigné una memoria base de 750 MB.

Solo para ponerlo a prueba, ejecuté 20 cosas a la vez en la máquina virtual. Según "top" en ubuntu, se estaban utilizando 750 megas de memoria, así como un considerable espacio de intercambio.

Sin embargo, en el Administrador de tareas de Windows, VitrualBox estaba usando solo 45,000K de memoria. Cuando le pedí a la máquina virtual que hiciera más y más, el uso de la CPU del proceso VirtualBox aumentó (en Windows) pero el uso de la memoria se mantuvo igual.

¿Cómo puede una máquina virtual que usa 750 MB de memoria consumir solo 45 MB de memoria en una máquina física?

Supongo que la respuesta es que la máquina virtual no está usando memoria real, sino memoria simulada (es decir, espacio de intercambio), pero seguro se siente ágil como si se estuviera ejecutando en la RAM.

ACTUALIZACIÓN: he jugado con perfmon como se sugiere. Incluso resumiendo todo lo que puedo pensar, todavía parece tomar menos de 300 megas ... por lo que sigue siendo un misterio.

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

Respuestas:


7

Las columnas en el Administrador de tareas pueden dar cifras engañosas: para un uso preciso de la memoria por proceso, puede usar perfmon (Monitor de rendimiento en el Panel de control) y ver las cifras de "bytes privados".

Para mostrar esto, vaya a perfmon, haga clic para agregar el contador (soy un tipo de persona Ctrl+ I). El "objeto de rendimiento" sería "Proceso", con "bytes privados" en la lista de contadores; obviamente, debe seleccionar el proceso relevante de la lista de la derecha.


Hola. Intenté esto, pero no tuve suerte de encontrar algo llamado Bytes privados. ¿Puedes dar un paso a paso?
dggoldst el

Han agregado ...
Rowland Shaw el

Gracias, esto es muy útil. He agregado el análisis a la pregunta. Sin embargo, todavía no puedo entender por qué no suma 750.
dggoldst el

Muy raro. Podría señalar que PrivateBytes es un subconjunto de VirtualBytes (los bytes virtuales son la proporción del espacio de direcciones asignado, mientras que los bytes privados son esa memoria que aún no se ha liberado; puede obtener fragmentación de la memoria con una pequeña pérdida de memoria, y tener las aplicaciones mueren con poca memoria, incluso cuando hay muchas disponibles). Puede ser que el controlador de virtualización esté asignando la memoria de una manera que significa que no aparecerá, lo que tendría sentido ya que la memoria debería ser inmune a la paginación en el disco.
Rowland Shaw el

De los cuatro contadores que coloca en su tabla, solo "PoolNonPagedBytes" es un recuento de memoria virtual no paginable, por lo tanto, esa cantidad de memoria física se utilizará. Los demás son todos virtuales. Como cualquier otro tamaño de memoria virtual, la RAM real que usa es casi siempre mucho menor, ese es uno de los puntos completos de la memoria virtual.
Jamie Hanrahan

5

Con algunas soluciones de virtualización en Linux, la forma en que asignan memoria hace que aparezca en el núcleo del host como un archivo especial mapeado en memoria (muy parecido al /proc/kcorearchivo especial), por lo que se cuenta en el recuento "en caché" en la salida de free, no el recuento "usado".

Supongo que algo similar está sucediendo con su entorno de Windows: los procesos de administración de VirtualBox utilizarán los 45Mb, y los 750 asignados a la VM se contarán en otro lugar.


0

Podría ser memoria virtual, archivos mapeados en memoria o algo similar.

¿Has intentado mostrar otras columnas en el Administrador de tareas?


0

No le creas al administrador de tareas. No puede verlo todo.

Este problema se ve más comúnmente con SQL Server, por ejemplo, con SQL, nunca he encontrado a nadie que me dijera una forma de obtener información precisa del Administrador de tareas que me llevara a creer que la figura no está oculta en uno de los otras columnas

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.