J'ai utilisé plusieurs machines virtuelles avec VirtualBox, et l'utilisation de la mémoire a été rapportée de différentes manières, et j'ai du mal à déterminer la quantité de mémoire réellement utilisée par mes machines virtuelles. Voici un exemple:
- J'ai une machine virtuelle sous Windows 7 (en tant qu'OS invité) sur mon ordinateur hôte Windows XP.
- La machine hôte dispose de 3 Go de RAM
- La VM invité est configurée pour avoir une mémoire de base de 1 Go.
- Si j'exécute le gestionnaire de tâches sur le système d'exploitation invité, la mémoire utilisée est de 430 Mo.
- Si j'exécute le gestionnaire de tâches sur le système d'exploitation hôte, trois processus semblent appartenir à VirtualBox:
- VirtualBox.exe (1), utilisant 60 Mo de mémoire (celui-ci semble utiliser au maximum le processeur)
- VirtualBox.exe (2), utilisant 20 Mo de mémoire
- VBoxSvc.exe, utilisant 11,5 Mo de mémoire
- Lors de l'exécution de la machine virtuelle, la mémoire utilisée par le système d'exploitation hôte est d'environ 2 Go.
- Lorsque je ferme la machine virtuelle, l'utilisation du système d'exploitation hôte revient à 900 Mo environ.
Donc, clairement, il y a des différences énormes ici. Je ne comprends vraiment pas comment GuestOS peut utiliser plus de 400 Mo alors que le système d'exploitation hôte ne montre qu'environ 75 Mo alloués à la machine virtuelle. Existe-t-il d'autres processus utilisés par VirtualBox qui ne sont pas nommés de manière évidente?
De plus, j'aimerais savoir si j'utilise une machine de 1 Go, est-ce que cela va prendre 1 Go de mon système d'exploitation hôte ou uniquement la quantité de mémoire actuellement utilisée par la machine invité?
Mise à jour:
Une personne a exprimé sa méfiance vis-à-vis de mes chiffres d'utilisation de la mémoire, et je ne suis pas sûre si cette méfiance était dirigée contre moi ou les rapports du gestionnaire de tâches de mon système d'exploitation hôte (qui est peut-être le coupable), mais pour les sceptiques, voici une capture d'écran de ces processus sur la machine hôte:
la source
Réponses:
Le seul emplacement dans le Gestionnaire des tâches qui semble refléter le montant total se trouve sur l'onglet Performances - la valeur Total Commit Charge suit à peu près le montant alloué à la machine virtuelle. Je viens d'en fermer une avec 1536 Mo alloués, et la charge de validation est passée d'environ 2,4 Go à 0,8 Go. Vous pouvez surveiller dans une certaine mesure ceci par rapport à Virtual Box à l'aide de l'Analyseur de performances et en choisissant les compteurs Process: Octets privés pour VirtualBox, VBoxSvc et également VirtualBox N ° 1, N ° 2, etc. (un pour chaque ordinateur virtuel en cours d'exécution). Il y a aussi le compteur Memory: Committed Bytes pour tout.
la source
Pour comprendre l'architecture de processus de VirtualBox, voir
Architecture de VirtualBox :
En ce qui concerne la mémoire, le manuel de l' utilisateur indique:
Cela signifie que l'invité sort de l'hôte:
Il est toujours possible que le manuel de VirtualBox ait plusieurs versions de retard et que les dernières techniques d'optimisation de la mémoire ne soient pas documentées.
En outre, VirtualBox peut optimiser l'utilisation de la mémoire en n'allouant pas toute la mémoire de la machine virtuelle définie.
L'allocation de mémoire en fonction des besoins est une optimisation qui peut économiser beaucoup de mémoire physique, mais les processus gourmands en mémoire de la VM peuvent être ralentis par le besoin fréquent de VirtualBox de demander plus de mémoire hôte.
la source
Cela semble être un problème de Windows. Voir le troisième article ici: http://forum.sysinternals.com/pe-is-not-showing-all-memory-used-by-virtualbox_topic23886.html
L'utilisation d'un programme tel que VMMap montre clairement que la mémoire que vous indiquez à la VBox d'utiliser est réellement utilisée. Aucune idée pourquoi ce n'est pas visible pour le gestionnaire de tâches ou l'explorateur de processus.
la source
Les entrées que vous voyez dans TaskManager ne sont pas destinées à votre machine virtuelle, mais à l'interface graphique de VirtualBox. L'onglet Performances vous indiquera clairement la quantité de mémoire totale utilisée, mais sans granularité en ce qui concerne les processus. Personnellement, j'aimerais que la VBox n'utilise que ce dont elle a besoin, mais je suis d'accord pour dire qu'il est important qu'elle puisse utiliser autant qu'elle le souhaite, d'où la distinction.
la source
Peut être lié aux ajouts d'invité VirtualBox.
Mon installation Ubuntu utilise actuellement environ 20 Mo, comme indiqué par WinXP. C'est avec VBoxAdditions.
Mon installation Lubuntu utilise actuellement environ 90 Mo, comme indiqué par WinXP. Je viens de l'installer; VBoxAdditions n'a pas été installé.
L'utilisation de la mémoire varie en fonction de ce que fait la machine virtuelle. J'ai installé mon Ubuntu en cours d'exécution ziproxy; lorsque je fais quelque chose qui parle à ziproxy, l'utilisation de la mémoire augmente de quelques mégaoctets au fur et à mesure de l'utilisation de la VM.
En général, cependant, la virtualisation a suffisamment progressé pour que les spécifications apparentes pour l'invité n'aient pas besoin d'être entièrement attribuées par l'hôte. Semble utiliser l'allocation dynamique et la pagination forte.
la source
Vous regardez ce qui est utilisé sur l'hôte, pas ce qui est alloué . L’invité n’utilise pas (pour le moment) plus de 400 Mo de RAM.
Il réservera 1 Go de RAM, mais il risque en fin de compte d’utiliser beaucoup moins que cela. Si l'invité n'utilise pas une partie de cette mémoire, la RAM hôte peut être utilisée à d'autres fins (telles que la mise en cache de pages de disque vierge), même si elle est réservée à l'invité. Et même si l'invité utilise une partie de cette mémoire, s'il ne l'utilise pas suffisamment longtemps, il peut toujours être éjecté de la mémoire physique par un échange opportuniste.
Malheureusement, vous vous êtes plongé dans une question extrêmement complexe et il faudrait beaucoup de pages pour l'expliquer réellement. Il y a beaucoup d'informations incorrectes dans les réponses à cette question.
la source
Vous pouvez le voir en utilisant la grande application VMMap de SysInternals :
VBoxSVC.exe
, il devrait avoir plusieurs processus enfantsVBoxHeadless.exe
si une machine virtuelle est en cours d'exécutionVBoxHeadless.exe
processus, sélectionnez la branche appropriée en vérifiant la ligne de commande du processus. Elle contient un identificateur de votre ordinateur virtuel.VBoxHeadless.exe
de la branche (c’est-à-dire qu’il n’a plus d’enfants, seulement un parent, alors c’est une feuille), rappelez-vous son PIDVBoxHeadless.exe
processus par son PID et cliquez sur OKDans mon cas, indiquant que tous les octets privés , jeu de travail et Committed mémoire en VMMap correspondent presque exactement la quantité de mémoire allouée à la machine virtuelle dans VirtualBox.
la source