
Uw Linux- of macOS-computer gebruikt virtueel geheugen. Ontdek hoe dit het gebruik van fysiek geheugen, CPU en harde schijf door uw systeem beïnvloedt.
Wat is virtueel geheugen?
Uw computer is uitgerust met een eindige hoeveelheid fysiek geheugen, genaamd RAM (Random Access Memory). Dit RAM-geheugen moet worden beheerd door de kernel en worden gedeeld tussen het besturingssysteem en de applicaties die toevallig worden uitgevoerd. Als deze gecombineerde eisen om meer geheugen vragen dan fysiek op uw computer is geïnstalleerd, wat kan de kernel dan doen?
Linux- en Unix-achtige besturingssystemen zoals macOS kunnen ruimte op uw harde schijf gebruiken om hen te helpen bij het beheren van geheugenvereisten. Een gereserveerde ruimte op de harde schijf genaamd “swap space” kan worden gebruikt alsof het een uitbreiding van RAM is. Dit is een virtueel geheugen.
De Linux-kernel kan de inhoud van een blok geheugen naar swapspace schrijven en dat gebied RAM vrijmaken voor gebruik door een ander proces. Het uitgewisselde – ook wel “wisselde” -geheugen genoemd, kan worden opgehaald uit de wisselruimte en indien nodig in het RAM-geheugen worden hersteld.
Natuurlijk is de toegangssnelheid voor uitgeput geheugen langzamer dan die van geheugen in RAM. En dat is niet de enige afweging. Hoewel virtueel geheugen Linux een manier biedt om zijn geheugenvereisten te beheren, legt het gebruik van virtueel geheugen grotere lasten elders op de computer.
Uw harde schijf moet meer lees- en schrijfbewerkingen uitvoeren. De kernel – en dus de CPU – moet meer werk doen als het geheugen uitwisselt, geheugen inwisselt en alle platen laat draaien om aan de geheugenbehoeften van de verschillende processen te voldoen.
Linux biedt u een manier om al deze activiteit te volgen in de vorm van het vmstat commando, dat rapporteert over statistieken van virtueel geheugen.
Het vmstat-commando
Als je typt vmstat als een commando zonder parameters, toont het u een reeks waarden. Deze waarden zijn de gemiddelden voor elk van de statistieken sinds uw computer voor het laatst opnieuw is opgestart. Deze cijfers zijn geen momentopname van de waarden “op dit moment”.
vmstat

Er wordt een korte tabel met waarden weergegeven.

Er zijn kolommen met de kop Procs, Memory, Swap, IO, System en CPU. De laatste kolom (meest rechtse kolom) bevat de gegevens met betrekking tot de CPU.

Hier is een lijst met de gegevensitems in elke kolom.
Proc
- r: Het aantal uitvoerbare processen. Dit zijn processen die zijn gestart en die worden uitgevoerd of wachten op hun volgende in tijd gesneden uitbarsting van CPU-cycli.
- b: Het aantal processen in ononderbroken slaap. Het proces slaapt niet, het voert een blokkerende systeemoproep uit en kan niet worden onderbroken totdat de huidige actie is voltooid. Meestal is het proces een apparaatstuurprogramma dat wacht tot er een bron vrij komt. Onderbrekingen in de wachtrij voor dat proces worden afgehandeld wanneer het proces zijn normale activiteit hervat.
Geheugen
- swpd: de hoeveelheid gebruikt virtueel geheugen. Met andere woorden, hoeveel geheugen is er uitgewisseld.,
- vrij: de hoeveelheid inactief (momenteel ongebruikt) geheugen.
- buff: de hoeveelheid geheugen die als buffers wordt gebruikt.
- cache: de hoeveelheid geheugen die als cache wordt gebruikt.
Wissel
- si: Hoeveelheid verwisseld virtueel geheugen in van swap space.
- zo: Hoeveelheid verwisseld virtueel geheugen uit om ruimte te wisselen.
IO
- bi: Blokken ontvangen van een blokapparaat. Het aantal datablokken dat wordt gebruikt om virtueel geheugen weer in RAM te wisselen.
- bo: Blokken verzonden naar een blokapparaat. Het aantal datablokken dat wordt gebruikt om virtueel geheugen uit RAM en in swapspace te wisselen.
Systeem
- in: Het aantal interrupts per seconde, inclusief de klok.
- cs: Het aantal contextschakelaars per seconde. Een contextomschakeling is wanneer de kernel wisselt van verwerking in systeemmodus naar verwerking in gebruikersmodus.
processor
Deze waarden zijn allemaal percentages van de totale CPU-tijd.
- ons: Tijd besteed aan het uitvoeren van niet-kernelcode. Dat wil zeggen, hoeveel tijd wordt besteed aan het verwerken van gebruikstijd en aan het verwerken van leuke tijd.
- sy: Tijd besteed aan het uitvoeren van kernelcode.
- ID kaart: Tijd doorgebracht inactief.
- wa: Tijd besteed aan het wachten op invoer of uitvoer.
- st: Tijd gestolen van een virtuele machine. Dit is de tijd dat een virtuele machine moet wachten totdat de hypervisor klaar is met het onderhouden van andere virtuele machines voordat deze terug kan komen om deze virtuele machine te bedienen.
Met behulp van een tijdsinterval
We kunnen hebben vmstat geef deze cijfers regelmatig updates met behulp van een delay waarde. De delay waarde wordt opgegeven in seconden. Om de statistieken elke vijf seconden te laten bijwerken, gebruiken we het volgende commando:
vmstat 5

Elke vijf seconden vmstat zal nog een regel met gegevens aan de tabel toevoegen. U moet op Ctrl + C drukken om dit te stoppen.

Met behulp van een telwaarde
Met een te lage a delay waarde zal uw systeem extra belasten. Als u snelle updates nodig heeft om een probleem te diagnosticeren, is het raadzaam een count waarde evenals een delay waarde.
De count waarde vertelt vmstat hoeveel updates moeten worden uitgevoerd voordat het wordt afgesloten en u terugkeert naar de opdrachtprompt. Als u geen count waarde, vmstat wordt uitgevoerd totdat het wordt gestopt door Ctrl + C.
Hebben vmstat geef elke vijf seconden een update, maar alleen voor vier updates, gebruik de volgende opdracht:
vmstat 5 4

Na vier updates vmstat stopt vanzelf.

De eenheden wijzigen
U kunt ervoor kiezen om de geheugen- en wisselstatistieken in kilobytes of megabytes weer te geven met behulp van de -S (unit-character) optie. Dit moet worden gevolgd door een van k , K , m, of M. Deze vertegenwoordigen:
- k: 1000 bytes
- K: 1024 bytes
- m: 1000000 bytes
- M.: 1048576 bytes
Gebruik de volgende opdracht om de statistieken elke 10 seconden te laten bijwerken met de geheugen- en swapstatistieken in megabytes:
vmstat 10 -S M

De geheugen- en wisselstatistieken worden nu weergegeven in megabytes. Merk op dat de -S optie heeft geen invloed op de IO-blokstatistieken. Deze worden altijd in blokken weergegeven.

Actief en inactief geheugen
Als u de -a (active) optie de buff- en cachegeheugenkolommen worden vervangen door de “inact” en “active” kolommen. Zoals ze zouden suggereren, tonen deze de hoeveelheid inactief en actief geheugen.
Om deze twee kolommen te zien in plaats van de buff- en cachekolommen, neemt u de -a optie, zoals getoond:
vmstat 5 -a -S M

De inactieve en actieve kolommen zijn beïnvloed door de -S (unit-character) optie.

Vorken
De -f schakelaar geeft het aantal vorken weer dat is gebeurd sinds de computer is opgestart.
Met andere woorden, dit toont het aantal taken dat is gestart (en, voor het grootste deel, weer gesloten) sinds het systeem werd opgestart. Elk proces dat vanaf de opdrachtregel wordt gestart, zou dit cijfer verhogen. Elke keer dat een taak of proces een nieuwe taak voortbrengt of kloont, zal dit cijfer toenemen.
vmstat -f

De vorkenweergave wordt niet bijgewerkt.
Slabinfo weergeven
De kernel heeft zijn eigen geheugenbeheer om zich zorgen over te maken, evenals het geheugenbeheer voor het besturingssysteem en alle applicaties.
Zoals je je misschien kunt voorstellen, wijst de kernel steeds weer geheugen toe en weer vrij voor de vele verschillende soorten gegevensobjecten die het moet verwerken. Om dit zo efficiënt mogelijk te maken, gebruikt het een systeem dat platen wordt genoemd. Dit is een vorm van caching.
Geheugen dat is toegewezen, gebruikt en niet langer nodig is voor een specifiek type kerneldata-object, kan worden hergebruikt voor een ander data-object van hetzelfde type zonder dat het geheugen ongedaan wordt gemaakt en opnieuw wordt toegewezen. Beschouw platen als vooraf toegewezen, op maat gemaakte segmenten van RAM voor de eigen behoeften van de kernel.
Gebruik de. Om de statistieken voor de platen te zien -m (platen) optie. U moet sudoen u wordt om uw wachtwoord gevraagd. Omdat de output behoorlijk lang kan zijn, werken we er doorheen less.
sudo vmstat -m | less

De uitvoer heeft vijf kolommen. Dit zijn:
- Cache: Naam van de cache.
- num: Het aantal momenteel actieve objecten in deze cache.
- totaal: Het totale aantal beschikbare objecten in deze cache.
- grootte: De grootte van elk object in de cache.
- Pagina’s: Het totale aantal geheugenpagina’s met (ten minste) één object dat momenteel aan deze cache is gekoppeld.

druk op q Verlaten less.
Gebeurtenistellers en geheugenstatistieken weergeven
Om een pagina met gebeurtenistellers en geheugenstatistieken weer te geven, gebruikt u de -s (stats) optie. Merk op dat dit een kleine letter ‘s’ is.
vmstat -s

Hoewel de statistieken die worden gerapporteerd grotendeels dezelfde zijn als de informatie die de standaard vormt vmstat output, sommige zijn in meer detail opgesplitst.
De standaarduitvoer combineert bijvoorbeeld zowel de mooie als de niet-aardige CPU-tijd van de gebruiker in de “us” -kolom. De -s (stats) display geeft deze statistieken afzonderlijk weer.

Schijfstatistieken weergeven
U kunt een vergelijkbare lijst met schijfstatistieken verkrijgen met de -d (schijf) optie.
vmstat -d | less

Voor elke schijf worden drie kolommen weergegeven, dit zijn Reads, Writes en IO.

IO is de meest rechtse kolom. Merk op dat de sec-kolom in IO wordt gemeten in seconden, maar de op tijd gebaseerde statistieken in de lees- en schrijfkolommen worden gemeten in milliseconden.

Dit is wat de kolommen betekenen:
Leest
- totaal: Het totale aantal schijflezingen.
- samengevoegd: Het totale aantal gegroepeerde leesbewerkingen.
- sectoren: Het totale aantal sectoren dat is ingelezen.
- Mevrouw: Totale tijd in milliseconden die is gebruikt bij het lezen van gegevens van de schijf.
schrijft
- totaal: Het totale aantal schrijfbewerkingen op de schijf.
- samengevoegd: Het totale aantal gegroepeerde schrijfbewerkingen.
- sectoren: Het totale aantal sectoren waarnaar wordt geschreven.
- Mevrouw = Totaal aantal tijd in milliseconden dat is gebruikt om gegevens naar de schijf te schrijven.
IO
- cur: Aantal huidige schijf lees- of schrijfbewerkingen.
- sec: Tijd die in seconden wordt besteed aan lopende lees- of schrijfbewerkingen.
Samenvatting schijfstatistieken weergeven
Om een snelle weergave van samenvattende statistieken voor uw schijfactiviteit te zien, gebruikt u de -D (disk-som) optie. Let op de hoofdletter “D.”
vmstat -D

Het aantal schijven kan er abnormaal hoog uitzien. De computer die is gebruikt om dit artikel te onderzoeken, draait Ubuntu. Met Ubuntu wordt elke keer dat u een applicatie vanuit een Snap installeert, een squashfs Er wordt een pseudo-bestandssysteem gemaakt dat is gekoppeld aan een / dev / loop-apparaat.
Vervelend genoeg worden deze apparaatvermeldingen door veel van de Linux-opdrachten en hulpprogramma’s als harde schijf-apparaten beschouwd.

Partitiestatistieken weergeven
Om statistieken met betrekking tot een specifieke partitie te zien, gebruikt u de -p (partitie) optie en geef de partitie-ID op als een opdrachtregelparameter.
Hier gaan we naar de partitie kijken sda1. Het cijfer één geeft aan dat dit de eerste partitie op het apparaat is sda, de belangrijkste harde schijf voor deze computer.
vmstat -p sda1

De geretourneerde informatie toont het totale aantal schijflees- en schijfschrijfacties naar en van die partitie, en het aantal sectoren dat is opgenomen in schijflees- en schijfschrijfacties.

Een kijkje onder de motorkap
Het is altijd goed om te weten hoe u de motorkap moet optillen en te zien wat er onder de kap gebeurt. Soms probeer je problemen op te lossen, soms is het niet interessant omdat je wilt weten hoe je computer tikt.
vmstat kan u veel nuttige informatie verstrekken. Nu weet u hoe u er toegang toe krijgt en wat het betekent. En gewaarschuwd is van tevoren: als u uw handen uit de mouwen moet steken en een diagnose moet stellen, weet u dat u vmstat aan jouw kant.