Cuando administra máquinas virtuales que se ejecutan en hosts de virtualización (VMWare ESXi o Hyper-V) y analiza problemas de rendimiento, a menudo se enfrenta a situaciones en las que el tamaño de la memoria disponible en el sistema operativo invitado es mucho menor de lo que ve el sistema operativo (o está asignado a él). eso). Por ejemplo, 8 GB de memoria se asignan a una máquina virtual, el Administrador de tareas muestra que 1 GB es libre aunque todos los procesos en ejecución consumen menos de 3 GB. ¿Dónde están los 4 GB restantes?
Como regla general, este comportamiento se debe al uso de la función de sobreasignación de memoria en el hipervisor.
Sobreasignación de memoria es una función de hipervisor que le permite asignar a las máquinas virtuales más memoria de la que está disponible en un host físico, pero sin ninguna garantía de que toda la memoria solicitada pueda asignarse en un momento determinado. La sobreasignación de memoria permite asignar máquinas virtuales de forma más densa debido a la distribución de memoria dinámica entre las máquinas virtuales en función de la carga actual del host (los recursos de las máquinas virtuales inactivas pueden redistribuirse entre las más cargadas).
Uno de los mecanismos para implementar la sobreasignación de memoria en VMWare es Globo de memoria. En Hyper-V, la misma característica es implementada por Memoria dinámica.
En VMWare ESXi, el compromiso excesivo de la memoria (aumento de la memoria virtual) se implementa mediante vmmemctl.sys controlador (incluido en VMware Tools), que puede capturar memoria física creando un proceso falso (como inflar un globo) en él si es necesario. Por lo tanto, la cantidad de memoria ocupada deja de estar disponible para otras aplicaciones en el sistema operativo invitado y el hipervisor puede distribuir la memoria libre entre otras máquinas virtuales. En la memoria dinámica de Hyper-V, un dmvsc.sys Se utiliza el controlador de los servicios de integración (componente VSC de memoria dinámica). El administrador del hipervisor gestiona la configuración del compromiso excesivo de la memoria.
¿Cómo puede detectar desde dentro de la máquina virtual invitada que en realidad tiene menos memoria física disponible de la que ve el sistema operativo invitado?
Consideremos cómo detectar si hay un controlador de globo en un sistema operativo Windows invitado y cuál es su tamaño. Entonces, analicemos este ejemplo.
Se asignan 8 GB de memoria a una máquina virtual que ejecuta Windows Server 2012 R2 como invitado. El Administrador de tareas muestra que se utiliza el 93% de la memoria (se ocupan 7,4 GB de memoria). Sin embargo, si suma la cantidad de memoria utilizada por todos los procesos en ejecución, puede llegar a la conclusión inesperada de que en realidad solo se utilizan 2,5 GB de memoria. ¿Dónde están los 5 GB restantes? Ni el Administrador de tareas ni el Monitor de recursos pueden responder a esta pregunta.
Para comprender lo que está sucediendo con la memoria, debe usar RamMap herramienta de Mark Russinovich (en uno de los casos anteriores, he mostrado cómo usar esta herramienta para diagnosticar un problema con el alto uso de memoria por metarchivo en Windows Server). Descargue la herramienta del sitio web de Microsoft (https://technet.microsoft.com/en-us/library/ff700229.aspx) y ejecútela con privilegios de administrador. Después de eso en el Usar recuentos puede ver que la mayor parte de la memoria (5,4 GB) la utiliza el Conductor bloqueado objeto.
Esta es la memoria que el hipervisor ha ocupado y distribuido entre otras máquinas virtuales mediante el controlador de globo en el sistema operativo invitado. Significa que el host del hipervisor no tiene suficiente memoria o que el administrador del hipervisor usa las políticas de límite de memoria para esta máquina virtual.
Las estadísticas actuales de la memoria de la máquina virtual en Hyper-V pueden mostrarse mediante contadores de rendimiento separados en el Monitor de rendimiento:
- Memoria dinámica de Hyper-V -> Memoria visible del invitado
- Memoria dinámica de Hyper-V -> Memoria física
Para deshabilitar este comportamiento, el administrador del hipervisor debe deshabilitar el Habilitar memoria dinámica opción en la configuración de Hyper-V de la VM (o aumentar el valor mínimo de reserva).

Si se utiliza el host VMWare ESXi, puede reservar más memoria para esta máquina virtual en el Configuración de recursos o reservar toda la memoria: reserva toda la memoria de los huéspedes (todo bloqueado).






