2014-03-11 02:46:08 +0000 2014-03-11 02:46:08 +0000
104
104

Waarom is het totale geheugengebruik dat door Windows Taakbeheer wordt gerapporteerd veel hoger dan de som van het geheugengebruik van alle processen?

Taakbeheer toont mijn totale geheugengebruik op 90% van mijn 6 GB totaal, maar geen enkel proces gebruikt meer dan 250 MB RAM, en de som van het RAM gebruik van alle lopende processen is minder dan 2 GB. Ik heb geprobeerd:

  • Kijken naar de getallen in de kolom “Geheugen” op het tabblad “Processen” van Windows 8 Taakbeheer.
  • Ik heb gekeken naar de kolommen “Werkset”, “Besloten werkset”, “Gedeelde werkset”, en “Vastleggingsgrootte” op het tabblad “Details” van Taakbeheer.
  • Ik kijk naar vergelijkbare geheugen-gerelateerde kolommen in Process Explorer.
  • Ik heb geprobeerd Sysinternals RAMMap uit te voeren, maar terwijl ik de lage-geheugen-crisis heb, crasht het bij het opstarten. Zodra ik het probleem opgelost heb, draait RAMMap normaal, maar op dat moment is het te laat.

Allen tonen een vrij kleine hoeveelheid geheugen in gebruik.

Er zijn veel mensen met varianten op deze vraag, met verschillende versies van windows, over het hele Internet. Sommigen van hen slagen erin hun problemen met weinig geheugen op te lossen, vaak door software opnieuw te installeren; soms door windows helemaal opnieuw te installeren. Ik ben op zoek naar een antwoord op de algemene vragen die ze allemaal delen, en die elders nooit beantwoord schijnen te worden:

  1. Waarom is het totaal gebruikte geheugen veel hoger dan het geheugen dat door alle genoemde processen wordt gebruikt, ongeacht hoe ik ze probeer te tellen?
  2. Hoe kan windows “weten” dat geheugen wordt gebruikt zonder te weten welk programma het gebruikt?
  3. Welke processen zouden geheugen kunnen gebruiken maar niet in de lijst verschijnen?
  4. Bestaat er software die meer informatie kan geven over gebruikt geheugen?

Details specifiek voor mijn eigen probleem: Sinds de upgrade naar Windows 8.1 doet het probleem zich voor zodra ik me aanmeld. Ik heb geen geheugen meer zodra ik een programma heb gestart. Ik merkte in Process Explorer dat verschillende instanties van iexplore.exe werden uitgevoerd, blijkbaar automatisch gestart. Een bepaalde instantie gebruikte slechts een paar MB RAM, maar toonde honderden miljoenen pagina fouten. In een opwelling, doodde ik dat specifieke proces, en het geheugen gebruik daalde onmiddellijk met 70%.

Leidt tot een specifieke vraag:

  • Hoe kon het doden van een proces dat zogenaamd maar een paar MB gebruikte, meerdere GB vrijmaken?

En een (vermoedelijk harde) bonusvraag:

  • Hoe kan ik voorkomen dat ik dit elke keer moet doen als ik mijn computer opnieuw opstart, behalve door Windows opnieuw te installeren?

Antwoorden (1)

6
6
6
2014-03-11 05:23:42 +0000

Trouwens, je moet proberen de term “geheugen” niet te gebruiken. Dat schept een hoop verwarring. Als u fysiek geheugen bedoelt, zeg dan “fysiek geheugen”, of “RAM”. Als u virtueel geheugen bedoelt, zeg dat dan. Als je backing store bedoelt, zeg het dan.

Waarom is het totaal gebruikte geheugen veel hoger dan het geheugen dat door alle genoemde processen wordt gebruikt, ongeacht hoe ik ze probeer te tellen?

Omdat het besturingssysteem geen fysiek geheugen (RAM) verspilt, tenzij het geen keus heeft.

Hoe kan windows “weten” dat geheugen wordt gebruikt zonder te weten welk programma het gebruikt?

Omdat geen enkel programma het gebruikt. Denk bijvoorbeeld aan geheugen dat de code bevat van een programma dat zojuist is beëindigd. Geen enkel programma gebruikt het. Maar dat geheugen wordt wel gebruikt, want het is niet vrij en bevat gegevens die nuttig kunnen zijn (voor het geval het programma opnieuw draait).

Welke processen gebruiken mogelijk geheugen, maar komen nu in de lijst voor?

Het wordt niet door processen gebruikt.

Bestaat er software die meer informatie kan geven over gebruikt geheugen? RAMMap kan dit doen.

Er zijn maar twee mogelijkheden, RAM kan gebruikt worden of het kan verspild worden. Het eerste is duidelijk beter. Elk vrij geheugen is voor altijd verspild – een 4GB machine kan vandaag niet 2GB gebruiken om morgen 6GB te gebruiken. Als je denkt “Ik wil het nu vrij hebben zodat ik het later kan gebruiken”, vergeet dat. Je kunt het nu gebruiken en later gebruiken.

Hoe kan het doden van een proces dat zogenaamd maar een paar MB gebruikte, meerdere GB’s vrijmaken?

Je hebt te weinig buffergeheugen, geen fysiek geheugen. Je hebt genoeg vrij fysisch geheugen maar onvoldoende backing store voor het OS om virtueel geheugen te blijven toewijzen dat misschien backing nodig heeft.

Het proces gebruikte maar een paar MB fysiek geheugen, maar het OS heeft misschien wel een paar GB aan backing geheugen moeten reserveren. Stel bijvoorbeeld dat een proces een beschrijfbare, privé geheugenafbeelding maakt van een bestand van 2 GB. Het besturingssysteem moet 2 GB aan “backed” virtueel geheugen voor het proces reserveren, omdat het naar elke byte van die mapping zou kunnen schrijven. Het kan ook zijn dat het nooit naar een van die bytes schrijft. Daarom heb je een paging bestand van goede grootte nodig.

Moderne besturingssystemen schrijven veel cheques uit (beloven backing op te slaan) die nooit geïnd zullen worden (RAM nodig hebben). Je kunt niet blijven schrijven cheques (veelbelovende backing store), zelfs als je genoeg geld op de bank (vrije RAM) als je al schreef een bos van grote cheques die al dan niet worden geïnd (beloofd zo veel backing store als je hebt). Paging bestanden voegen backing store toe, waardoor het OS kan blijven cheques uitschrijven.

Gerelateerde vragen

8
19
13
6
4