Vraag Top - wat betekent virtuele geheugengrootte? ... linux / ubuntu


ik ben aan het rennen top om mijn serverprestaties te controleren en 2 van mijn Java-processen tonen virtueel geheugen van maximaal 800 MB - 1 GB. Is dat iets slechts?

Wat betekent virtueel geheugen?

En oh trouwens, ik heb een swap van 1 GB en het laat zien dat 0% gebruikt is. Dus ik ben in de war.

Java-proces = 1 Tomcat-server + mijn eigen Java-daemon Server = Ubuntu 9.10 (karmic)


99
2018-05-04 15:37


oorsprong


Zien: serverfault.com/questions/48582/... - Juliano


antwoorden:


Virtueel geheugen is niet eens noodzakelijkerwijs geheugen. Als een procesgeheugen bijvoorbeeld een groot bestand toewijst, wordt het bestand feitelijk op de schijf opgeslagen, maar neemt het nog steeds 'adresruimte' in beslag.

Adresruimte (dwz virtueel geheugen in de proceslijst) kost niets; het is niet echt. Wat echt is, is de RSS (RES) kolom, die het interne geheugen is. Dat is hoeveel van je werkelijke geheugen een proces bezet.

Maar zelfs dat is niet het hele antwoord. Als een proces fork () aanroept, splitst het zich in twee delen en beiden delen in eerste instantie al hun RSS. Dus zelfs als RSS in eerste instantie 1 GB was, zou het resultaat na forking twee processen zijn, elk met een RSS van 1 GB, maar zou u nog steeds slechts 1 GB geheugen gebruiken.

Nog in de war? Dit is wat u echt moet weten: gebruik de free commando en controleer de resultaten voor en na het starten van uw programma (op de +/- buffers/cache lijn). Dat verschil is hoeveel nieuwe geheugen uw nieuw gestarte programma gebruikt.


119
2018-05-05 01:17



"Controleer de resultaten vóór en na het starten van uw programma", of gebruik USS (Unique Set Size) zoals geretourneerd door smem. - Hubert Kario
Dus is er een tool die de juiste hoeveelheid geheugen gebruikt, tools die geen derde partij zijn. - CMCDragonkai
@CMCDragonkai Ja, gratis. - deviantfan
Als ik een Java-proces start via java -Xmx16g RunLong, dat 16 GB geheugen zou reserveren voor het Java-proces, dan in VIRT van top lijkt het dat de 16Gb wordt geteld. Wat is in dit geval het type van dit 16 Gb geheugen, is dat toegewezen geheugen of ..? - Eric Wang


Vanaf de top (1) manpagina:

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.

      VIRT = SWAP + RES.

Waarbij RESidentiteitsgeheugen betekent (fysiek geheugen gebruikt).

Eigenlijk is dat niet correct (meer). Als er 'swap' wordt vermeld, bevat dit ook bestanden die door het programma zijn toegewezen aan de adresruimte, die al dan niet daadwerkelijk echte RAM verbruikt. Dit geheugen is bestand-ondersteund maar is niet echt verwisseld.

VIRT omvat ook pagina's die al zijn toegewezen maar nog niet zijn gebruikt. Elke pagina in deze status is toegewezen aan de kernel Zero-pagina (briljant concept - je zou het moeten opzoeken), dus het verschijnt in VIRT maar verbruikt eigenlijk geen geheugen.


22
2018-05-04 15:43



nou dat is interessant, zo is VIRT = SWAP + RES, hoe komt het dat mijn SWAP-gebruik nul is, terwijl virtueel geheugen voor de 2 Java-processen dicht bij een 1GB is ?? - kapso
eigenlijk Topshows .... Ruilen: 1048568k totaal, 0k gebruikt, 1048568k gratis, 505728k in de cache - kapso
@ user42159 Dit antwoord is VERKEERD! Er is GEEN 'VIRT = WISSEL + RES' in de top van de man! -m : VIRT/USED toggle Reports USED (sum of process rss and swap total count) instead of VIRT. Het is jammer dat ik dit antwoord niet kan overstemmen. - duleshi
Dit antwoord is onjuist. USED ​​= Res + Swap Size (van Top Fields Management, toegankelijk door op de f-toets te drukken bovenaan), ook vanaf de topman-pagina). - Jason S


ik vond dit uitleg van Mugurel Sumanariu Heel duidelijk:

VIRT staat voor de virtuele grootte van een proces, wat de som is van   geheugen dat het eigenlijk gebruikt, geheugen dat het in zichzelf heeft afgebeeld (voor   bijvoorbeeld het RAM van de videokaart voor de X-server), bestanden op schijf die   zijn in kaart gebracht (met name gedeelde bibliotheken) en geheugen   gedeeld met andere processen. VIRT vertegenwoordigt hoeveel geheugen de   programma kan op dit moment openen.

RES staat voor de verblijfsgrootte, wat een juiste weergave is   van hoeveel daadwerkelijk fysiek geheugen een proces verbruikt. (Dit ook   komt direct overeen met de% MEM-kolom.) Dit zal vrijwel altijd gebeuren   minder zijn dan de VIRT-grootte, omdat de meeste programma's afhankelijk zijn van de C   bibliotheek.

SHR geeft aan hoeveel van de VIRT-grootte daadwerkelijk deelbaar is (geheugen   of bibliotheken). In het geval van bibliotheken betekent dit niet noodzakelijkerwijs   dat de hele bibliotheek bewoner is. Bijvoorbeeld alleen een programma   gebruikt een paar functies in een bibliotheek, de hele bibliotheek is in kaart gebracht en   wordt geteld in VIRT en SHR, maar alleen in de onderdelen van de bibliotheek   het bestand met de gebruikte functies wordt daadwerkelijk ingeladen   en worden geteld onder RES.


8
2018-01-27 17:53





De VIRT-kolom in de ps / top-uitvoer is bijna irrelevant om het geheugengebruik te meten. Maak je geen zorgen. Apache zware belasting VIRT vs RES-geheugen

https://stackoverflow.com/questions/561245/virtual-memory-usage-from-java-under-linux-too-much-memory-used


5
2018-05-04 15:41



Bedankt, ik was ongerust en verward, omdat terwijl het gebruik van swap 0% was, de kolom virtueel geheugen erg hoog is. En ik heb ook slechts 1,7 GB van het totale 2,7 GB fysieke geheugen gebruikt, terwijl het virtuele geheugen hoog is? - kapso


Linux ondersteunt virtueel geheugen, dat wil zeggen, een schijf gebruiken als een uitbreiding van RAM, zodat de effectieve grootte van bruikbaar geheugen dienovereenkomstig groeit. De kernel zal de inhoud van een momenteel ongebruikt geheugenblok naar de harde schijf schrijven, zodat het geheugen voor een ander doel kan worden gebruikt. Wanneer de originele inhoud opnieuw nodig is, worden ze opnieuw in het geheugen gelezen. Dit wordt allemaal volledig transparant gemaakt voor de gebruiker; programma's die onder Linux draaien zien alleen de grotere hoeveelheid beschikbaar geheugen en merken niet dat delen van hen van tijd tot tijd op de schijf verblijven. Natuurlijk is lezen en schrijven van de harde schijf langzamer (in de orde van duizend keer langzamer) dan met echt geheugen, dus de programma's werken niet zo snel. Het deel van de harde schijf dat als virtueel geheugen wordt gebruikt, wordt de swapspace genoemd.

Linux kan een normaal bestand in het bestandssysteem gebruiken of een aparte partitie voor swapspace. Een swap-partitie is sneller, maar het is gemakkelijker om de grootte van een swap-bestand te wijzigen (het is niet nodig om de hele harde schijf opnieuw te partitioneren en mogelijk alles vanaf nul te installeren). Als je weet hoeveel swapruimte je nodig hebt, moet je een swap-partitie kiezen, maar als je niet zeker bent, kun je eerst een swap-bestand gebruiken, het systeem een ​​tijdje gebruiken, zodat je een idee krijgt van hoeveel je ruilt nodig hebt en maak dan een swappartitie als je zeker bent van de grootte ervan.

Je moet ook weten dat Linux het mogelijk maakt om meerdere swap-partities te gebruiken en / of tegelijkertijd bestanden te wisselen. Dit betekent dat als u slechts af en toe een ongewone hoeveelheid swapruimte nodig heeft, u op dat moment een extra wisselbestand kunt instellen, in plaats van dat u het hele bedrag altijd toegewezen houdt.

Een opmerking over de terminologie van het besturingssysteem: in de informatica wordt meestal onderscheid gemaakt tussen swappen (het hele proces wegschrijven om ruimte te wisselen) en paging (alleen delen met een vaste grootte schrijven, meestal enkele kilobytes tegelijk). Paging is meestal efficiënter, en dat is wat Linux doet, maar de traditionele Linux-terminologie spreekt sowieso over swappen.

Bron: http://www.faqs.org/docs/linux_admin/x1752.html


2
2018-05-04 15:43



Dit antwoord verspreidt de misvatting dat virtueel geheugen hetzelfde is als wisselen of pagen. Het gebruik van de schijf als een uitbreiding van het RAM-geheugen is ouder dan het virtuele geheugen. En er zijn veel systemen (zoals de meeste SoHo-routers) met virtueel geheugen, maar gebruiken geen schijf als een uitbreiding van RAM. (En dit is ook niet het antwoord op de vraag van het OP, aangezien hij geen ruil gebruikt.) - David Schwartz


VIRtual kolom van de top, verwijst naar de superruimte (superverbruiksruimte) van het proces, die het proces mogelijk niet daadwerkelijk tijdens de uitvoering uitvoert. Er is nog een kolom RESident, dat verwijst naar het daadwerkelijke fysieke geheugen / de toegewezen ruimte door het proces, tijdens de runtime.

De reden voor het verschil, tussen de twee, kan worden begrepen door het voorbeeld: als het proces een bepaalde bibliotheek gebruikt, dan zal de bibliotheekgrootte ook helpen bij het virtual-size. omdat slechts een deel van de bibliotheek zou worden gebruikt (dat wil zeggen, sommige werkwijzen in gebruik), dus dat zal helpen resident-size.

Refereer voor Meer informatie


2
2018-02-26 14:27





"VIRT" adresseert alleen ruimte, RES is het "echte" geheugen, maar de "SHR" (= gedeelde) hoeveelheid "RES" is het deel van RES dat wordt gedeeld met andere processen. Dus voor de meeste processen geloof ik dat door SHR van RES af te trekken je de hoeveelheid geheugen krijgt die echt aan dit specifieke proces kan worden toegeschreven.


0
2018-04-18 23:03