J'ai un processus qui signale en «haut» qu'il a 6 Go de mémoire résidente et 70 Go de mémoire virtuelle alloués. Ce qui est étrange, c'est que ce serveur particulier ne dispose que de 8 Go physiques et de 35 Go d'espace de swap.
Depuis le manuel `` supérieur '':
o: VIRT -- Virtual Image (kb)
The total amount of virtual memory used by the task. It includes
all code, data and shared libraries plus pages that have been
swapped out. (Note: you can define the STATSIZE=1 environment vari-
able and the VIRT will be calculated from the /proc/#/state VmSize
field.)
VIRT = SWAP + RES.
Compte tenu de cette explication, je m'attendrais à ce que l'allocation de mémoire virutale pour un processus soit limitée à mon swap + mémoire physique disponible.
Selon «pmap», le code, la bibliothèque partagée et les sections de mémoire partagée de ce processus sont tous minimes - pas plus de 300 Mo environ.
De toute évidence, la machine et le processus fonctionnent toujours correctement (quoique lentement), alors qu'est-ce qui me manque ici?
la source
Voici une discussion de virt vs mémoire résidente:
/programming/561245/virtual-memory-usage-from-java-under-linux-too-much-memory-used
La discussion se réfère aux processus Java, mais s'applique à tout ce qui fonctionne sous Linux. Le point principal en ce qui concerne la vertu est que le total comprend tout un tas de choses qui ne peuvent jamais être utilisées. Virt est quelque chose à regarder pour les systèmes d'exploitation 32 bits (car les processus atteindront des limites sur l'espace adressable), mais il est largement inutile autrement. Comme indiqué, la chose à laquelle il faut faire attention est la mémoire résidente, qui sera limitée à la RAM physique disponible et à votre swap.
la source
Cela est probablement dû au fait que l'espace d'adressage du processus est de la taille que vous avez indiquée, mais il n'est pas vraiment alloué par le système d'exploitation.
De: http://lwn.net/Articles/428100/
C'est donc la façon non élégante de gérer la mémoire parfois - avoir un espace d'adressage continu simplifie la libération de mem inutilisé.
la source
La réponse est probablement MMAP - les données sont sur le disque, mais elles sont "en dehors" du swap et ne peuvent pas être vues avec la commande "free" ou "top".
Si le processus java n'est pas trop compliqué, vous pouvez essayer de jouer avec "lsof" pour trouver où se trouve le fichier MMAP. Cependant, si ce processus java est compliqué, il sera difficile d'être vu.
la source
J'ai également été surpris que Linux vous permette d'allouer plus de mémoire virtuelle qu'il n'y a de mémoire physique + d'espace de swap, mais apparemment, cela améliore les performances dans des situations typiques.
http://www.linuxjournal.com/article/10678
la source