Je suis en cours top
d' exécution pour surveiller les performances de mon serveur et deux de mes processus java affichent une mémoire virtuelle allant jusqu'à 800 Mo-1 Go. Est-ce une mauvaise chose?
Qu'est-ce que la mémoire virtuelle signifie?
Et oh btw, j'ai swap de 1 Go et il montre 0% utilisé. Donc je suis confus.
Processus Java = 1 serveur Tomcat + mon propre démon java Server = Ubuntu 9.10 (karmic)
linux
virtualization
memory
top
Kapso
la source
la source
Réponses:
La mémoire virtuelle n'est même pas nécessairement de la mémoire. Par exemple, si un processus mappe en mémoire un fichier volumineux, le fichier est en réalité stocké sur le disque, mais il occupe tout de même un "espace adresse" dans le processus.
L'espace d'adressage (c'est-à-dire la mémoire virtuelle dans la liste de processus) ne coûte rien; ce n'est pas vrai. Ce qui est réel, c'est la colonne RSS (RES), qui est la mémoire résidente. C'est la quantité de votre mémoire réelle occupée par un processus.
Mais même cela n'est pas la solution. Si un processus appelle fork (), il se scinde en deux parties, qui partagent toutes les deux leurs flux RSS. Ainsi, même si le format RSS était initialement de 1 Go, le résultat après le forking serait deux processus, chacun avec un flux RSS de 1 Go, mais vous n'utiliseriez toujours que 1 Go de mémoire.
Encore confus? Voici ce que vous devez vraiment savoir: utilisez la
free
commande et vérifiez les résultats avant et après le démarrage de votre programme (sur la+/- buffers/cache
ligne). Cette différence est la quantité de nouvelle mémoire de votre programme récemment commencé à utiliser.la source
smem
.java -Xmx16g RunLong
, qui réserverait 16 Go de mémoire pour le processus javaVIRT
, il semblerait que le 16 Go soit compté. Dans ce cas, quel est le type de cette mémoire de 16 Go, s'agit-il d'une mémoire mappée ou ..?Depuis la page de manuel du haut (1):
Où RES signifie mémoire résidente (mémoire physique utilisée).
En fait, ce n'est pas correct (plus). Quand il dit «swap», cela inclut également les fichiers que le programme a mappés dans son espace d'adressage, ce qui peut ou non consommer encore de la RAM réelle. Cette mémoire est sauvegardée dans un fichier mais n'est pas vraiment échangée.
VIRT inclut également des pages allouées mais non encore utilisées. Toute page dans cet état est mappée sur la Zero Page du noyau (concept génial - vous devriez la rechercher) afin qu’elle apparaisse dans VIRT mais ne consomme en réalité aucune mémoire.
la source
-m : VIRT/USED toggle Reports USED (sum of process rss and swap total count) instead of VIRT
. Dommage que je ne puisse pas abaisser cette réponse.J'ai trouvé cette explication de Mugurel Sumanariu très claire:
la source
La colonne VIRT dans la sortie ps / top est presque inutile pour mesurer l'utilisation de la mémoire. Ne t'inquiète pas pour ça. Apache charge lourde VIRT vs mémoire RES
https://stackoverflow.com/questions/561245/virtual-memory-usage-from-java-under-linux-too-much-memory-used
la source
Linux prend en charge la mémoire virtuelle, c’est-à-dire l’utilisation d’un disque en tant qu’extension de la mémoire vive de sorte que la taille effective de la mémoire utilisable augmente en conséquence. Le noyau écrira le contenu d'un bloc de mémoire inutilisé sur le disque dur afin que la mémoire puisse être utilisée à d'autres fins. Lorsque le contenu d'origine est à nouveau utilisé, il est lu en mémoire. Tout cela est rendu complètement transparent pour l'utilisateur; les programmes fonctionnant sous Linux ne voient que la quantité de mémoire disponible la plus importante et ne remarquent pas que certaines parties résident de temps en temps sur le disque. Bien sûr, la lecture et l’écriture du disque dur sont plus lentes (environ mille fois moins) que l’utilisation de la mémoire réelle, de sorte que les programmes ne tournent pas aussi vite. La partie du disque dur utilisée comme mémoire virtuelle est appelée espace de permutation.
Linux peut utiliser soit un fichier normal dans le système de fichiers, soit une partition séparée pour l’espace de permutation. Une partition de swap est plus rapide, mais il est plus facile de changer la taille d'un fichier de swap (il n'est pas nécessaire de repartitionner tout le disque dur et, éventuellement, de tout installer à partir de zéro). Lorsque vous savez combien d’espace de swap dont vous avez besoin, vous devriez choisir une partition de swap, mais en cas de doute, vous pouvez d’abord utiliser un fichier swap, puis utiliser le système pendant un certain temps pour avoir une idée de la quantité de swap utilisée. besoin, puis faites une partition de swap lorsque vous êtes sûr de sa taille.
Vous devez également savoir que Linux permet d'utiliser plusieurs partitions et / ou fichiers d'échange en même temps. Cela signifie que si vous avez rarement besoin d'une quantité inhabituelle d'espace d'échange, vous pouvez configurer un fichier d'échange supplémentaire à ce moment-là, au lieu de conserver la totalité du montant alloué en permanence.
Remarque sur la terminologie du système d'exploitation: l'informatique distingue généralement l'échange (l'écriture de l'intégralité du processus dans l'espace d'échange) de la pagination (l'écriture de pièces de taille fixe, généralement de quelques kilo-octets à la fois). La pagination est généralement plus efficace, et c'est ce que fait Linux, mais la terminologie traditionnelle de Linux parle de permutation de toute façon.
Source: http://www.faqs.org/docs/linux_admin/x1752.html
la source
VIRtual
La colonne du haut fait référence au super-espace (espace de super consommation) du processus, que le processus ne prend peut-être pas réellement au moment de l'exécution. Il existe une autre colonneRESident
, qui fait référence à la mémoire physique / espace réelle allouée par le processus, au moment de l'exécution.La raison de la différence, entre les deux, peut être comprise à l’aide de l’exemple: si le processus utilise une certaine bibliothèque, la taille de la bibliothèque contribuera également au
virtual-size
. cependant, étant donné que seulement une partie de la bibliothèque serait utilisée (c’est-à-dire certaines méthodes utilisées), cela facilitera la tâcheresident-size
.Reportez-vous pour plus d'informations
la source
"VIRT" ne représente qu'un espace d'adressage, RES est la "vraie" mémoire, mais la quantité "SHR" (= partagée) de "RES" est la partie de RES partagée avec d'autres processus. Donc, pour la plupart des processus, je pense qu'en soustrayant SHR de RES, vous obtenez la quantité de mémoire réellement attribuable à ce processus particulier.
la source