42 votes

Comment fonctionne l'utilisation de la mémoire de VirtualBox?

J'ai exécuté plusieurs machines virtuelles avec VirtualBox, et l'utilisation de la mémoire rapportée de différentes perspectives, et j'ai du mal à comprendre combien de mémoire mes machines virtuelles utilisent réellement. Voici un exemple :

  • J'ai une machine virtuelle exécutant Windows 7 (comme système d'exploitation invité) sur ma machine hôte Windows XP.
  • La machine hôte a 3 Go de RAM
  • La machine virtuelle est configurée pour avoir une mémoire de base de 1 Go
  • Si j'exécute le Gestionnaire des tâches sur le système d'exploitation invité, je vois une utilisation de mémoire de 430 Mo
  • Si j'exécute le Gestionnaire des tâches sur le système hôte, je vois 3 processus qui semblent appartenir à VirtualBox :
    1. VirtualBox.exe (1), utilisant 60 Mo de mémoire (celui-ci semble avoir le plus d'utilisation du processeur)
    2. VirtualBox.exe (2), utilisant 20 Mo de mémoire
    3. VBoxSvc.exe, utilisant 11,5 Mo de mémoire
  • En exécutant la machine virtuelle, l'utilisation de la mémoire du système hôte est d'environ 2 Go
  • Lorsque j'arrête la machine virtuelle, l'utilisation de la mémoire du système hôte revient à environ 900 Mo

Il y a donc clairement d'énormes différences ici. Je ne comprends vraiment pas comment le système d'exploitation invité peut utiliser plus de 400 Mo, alors que le système hôte n'affiche que 75 Mo alloués à la machine virtuelle. Y a-t-il d'autres processus utilisés par VirtualBox qui ne sont pas nommés aussi clairement ?

De plus, j'aimerais savoir si j'exécute une machine avec 1 Go, cela va-t-il prendre 1 Go de mémoire de mon système hôte, ou seulement la quantité de mémoire que la machine invité utilise actuellement ?

Mise à jour :

Quelqu'un a exprimé de la méfiance quant à mes chiffres d'utilisation de la mémoire, et je ne suis pas sûr si cette méfiance était dirigée contre moi, ou contre les rapports du Gestionnaire des tâches de mon système hôte (qui est peut-être le coupable), mais pour tout sceptique, voici une capture d'écran de ces processus sur la machine hôte :

Gestionnaire des tâches VirtualBox

13voto

harrymc Points 394411

Pour comprendre l'architecture du processus de VirtualBox, consultez
L'architecture de VirtualBox :

Une fois que vous avez démarré une machine virtuelle (VM) à partir de l'interface graphique, vous avez deux fenêtres (la fenêtre principale et la VM), mais trois processus en cours d'exécution. En regardant votre système depuis le Gestionnaire des tâches (sous Windows) ou un moniteur système (sous Linux), vous verrez ceci :

  1. VirtualBox, l'interface graphique pour la fenêtre principale;

  2. Un autre processus VirtualBox qui a été démarré avec le paramètre -startvm, ce qui signifie que son interface graphique agit comme une coquille pour une VM;

  3. VBoxSVC, le service mentionné ci-dessus, qui fonctionne en arrière-plan pour suivre tous les processus impliqués. Celui-ci a été automatiquement démarré par le premier processus GUI.

En ce qui concerne la mémoire, le Manuel de l'utilisateur indique :

Mémoire de base

Cela définit la quantité de RAM qui est allouée et donnée à la VM lorsqu'elle est en cours d'exécution. La quantité spécifiée de mémoire sera demandée au système d'exploitation hôte, donc elle doit être disponible ou rendue disponible sous forme de mémoire libre sur l'hôte lors de la tentative de démarrage de la VM et ne sera pas disponible pour l'hôte pendant que la VM est en cours d'exécution. C'est le même paramètre qui a été spécifié dans l'assistant "Nouvelle machine virtuelle", comme décrit avec des directives dans la section appelée "Créer une machine virtuelle" ci-dessus.

Cela signifie que l'invité prend de l'hôte :

  • Autant de mémoire que celle qui a été déclarée
  • Chaque VM est également un exécutable VirtualBox, donc vous devez ajouter sa mémoire.

Il est toujours possible que le manuel de VirtualBox soit plusieurs versions en arrière, et que les dernières techniques d'optimisation de la mémoire ne soient pas documentées.

De plus, VirtualBox peut optimiser l'utilisation de la mémoire en n'allouant pas toute la mémoire de la VM définie.

Allouer de la mémoire au fur et à mesure est une optimisation qui peut économiser beaucoup de mémoire physique, mais les processus intensifs en mémoire dans la VM peuvent être ralentis par le besoin fréquent de VirtualBox de demander plus de mémoire hôte.

12voto

Russ Points 1126

Le seul endroit dans le Gestionnaire des tâches qui semble refléter la quantité totale est l'onglet Performances - la valeur de l'Utilisation totale des ressources suit approximativement le montant alloué à la machine virtuelle. Je viens de fermer une avec 1536 Mo alloués, et l'utilisation des ressources est passée d'environ 2,4 Go à 0,8 Go. Vous pouvez surveiller dans une certaine mesure cela par rapport à Virtual Box en utilisant le Moniteur de performances, et en choisissant les compteurs Processus : octets privés pour VirtualBox, VBoxSvc, et également VirtualBox#1, #2, etc. (un pour chaque machine virtuelle en cours d'exécution). Il y a aussi le compteur Mémoire : octets engagés pour tout.

6voto

RandomInsano Points 326

Cela semble être un problème de Windows. Veuillez consulter le troisième message ici : http://forum.sysinternals.com/pe-is-not-showing-all-memory-used-by-virtualbox_topic23886.html

Utiliser un programme tel que VMMap montre clairement que la mémoire que vous indiquez à VBox d'utiliser est effectivement utilisée. Aucune idée pourquoi elle n'est pas visible dans le gestionnaire de tâches ou l'explorateur de processus.

2voto

Rob Vanstone Points 21

Ces entrées que vous voyez dans le Gestionnaire des tâches ne sont pas pour votre machine virtuelle, mais pour l'interface graphique de VirtualBox. L'onglet de performances vous montrera clairement combien de votre mémoire totale est utilisée, mais sans granularité concernant les processus. Personnellement, j'aimerais que VBox n'utilise que ce dont il a besoin, mais je suis d'accord qu'il est important pour lui de pouvoir utiliser autant qu'il s'attend, d'où la clôture de protection.

2voto

Vous pouvez le voir en utilisant l'application SysInternals de grande qualité VMMap :

  1. Tout d'abord, vous devez trouver le bon processus, commencez par exemple avec Process Hacker ou Process Explorer de SysInternals
  2. Affichez la liste des processus sous forme d'arborescence (en cliquant sur l'en-tête de colonne "Nom" dans la liste des processus)
  3. Localisez le processus VBoxSVC.exe, il devrait avoir plusieurs processus enfants VBoxHeadless.exe si une machine virtuelle est en cours d'exécution
  4. Si plusieurs machines virtuelles sont en cours d'exécution, il y aura plusieurs branches de processus VBoxHeadless.exe, choisissez la bonne branche en vérifiant la ligne de commande du processus, elle contient un identifiant de votre machine virtuelle
  5. Vous vous intéresserez au VBoxHeadless.exe le plus interne de la branche (c'est-à-dire qu'il n'a pas d'autres enfants, seulement un parent, donc c'est une feuille), retenez son PID
  6. Démarrer VMMap
  7. Sélectionnez le bon processus VBoxHeadless.exe par son PID et cliquez sur OK

Dans mon cas, tous les Octets privés, Ensemble de travail et Engagement mémoire rapportés par VMMap correspondent presque exactement à la quantité de mémoire attribuée à la machine virtuelle dans VirtualBox.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X