Vraag Waarom meldt Linux het "gratis" geheugen vreemd?


Dit is een canonieke vraag over hoe Unix-besturingssystemen het geheugengebruik rapporteren.
  Vergelijkbare vragen:

Ik heb een productieserver die draait Debian 6.0.6 Squeeze

#uname -a

Linux debsrv 2.6.32-5-xen-amd64 #1 SMP Sun Sep 23 13:49:30 UTC 2012 x86_64 GNU/Linux

Elke dag cron voert back-upscript uit als root:

#crontab -e

0 5 * * * /root/sites_backup.sh > /dev/null 2>&1

#nano /root/sites_backup.sh

#!/bin/bash
str=`date +%Y-%m-%d-%H-%M-%S`
tar pzcf /home/backups/sites/mysite-$str.tar.gz /var/sites/mysite/public_html/www
mysqldump -u mysite -pmypass mysite | gzip -9 > /home/backups/sites/mysite-$str.sql.gz
cd /home/backups/sites/
sha512sum mysite-$str* > /home/backups/sites/mysite-$str.tar.gz.DIGESTS
cd ~

Alles werkt perfect, maar ik merk dat van Munin geheugen grafiek toont toename van cache en buffers na back-up.

Daarna download ik gewoon back-upbestanden en verwijder ze. Na het verwijderen van Munin geheugen grafiek komt terug cache en buffers naar de staat die vóór de back-up was.

Hier is de Munin-grafiek:

Extern gehost beeld was een doodlopende link.


44
2017-11-16 04:29


oorsprong


Gefeliciteerd, deze vraag is heilig verklaard (het is net zoals de 6e vandaag, en het heeft toevallig het meest interessante en mooiste voorbeeld :-) - voretaq7
Zien LinuxAteMyRam.com - Christoffer Hammarström


antwoorden:


Dit is hetzelfde "probleem" als van Server weigert swappartitie te gebruiken en een paar andere soortgelijke vragen op deze site. ( Hoog geheugengebruik op Linux Server, Geheugengebruik in LINUX, Webserver met weinig geheugen, enz.)

Let op het geheugengebruik cache. Dit betekent dat het een bestand in het geheugen houdt. Geheugen in de cache is "vrij" geheugen. In plaats van het blok met geheugen leeg te laten, bewaart uw besturingssysteem recent gelezen bestanden in die ruimte. Als een toepassing dat geheugen nodig heeft, wordt het door de toepassing gebruikt. Tot die tijd biedt het een kans om te voorkomen dat u opnieuw een bestand van de schijf moet lezen als er vaak naar wordt verwezen.

Volgens deze grafiek is uw effectieve geheugenverbruik helemaal niet veranderd gedurende de volledige duur van de grafiek.


27
2017-11-16 04:47



Is het mogelijk om de server opdracht te geven deze bestanden niet in de cache op te slaan? Ik denk dat ik moet vluchten sync; echo 3 > /proc/sys/vm/drop_caches na een back-up?
@ stan31337 Ja, het is mogelijk, nee jij zou niet doe dat. Het hebben van dit bestand kost niets. Als u al uw caches wist, zal elk bestand dat in de cache is opgeslagen en opnieuw moet worden gelezen vanaf de schijf uw systeem vertragen. Laat het doen waarvoor het ontworpen was. - Jeff Ferland
@ stan31337 Wanneer u uw back-upbestand verwijdert, wordt het door het besturingssysteem automatisch uit de cache geschopt (dat is de reden waarom uw gratis geheugen opnieuw springt nadat u het hebt verwijderd) - Linux is slim genoeg om te weten dat een bestand niet geopend is en niet kan worden bereikt vanuit de structuur van het bestandssysteem zal nooit opnieuw worden benaderd. Zoals Jeff al zei, je wilt zeker niet je hele FS-cache dumpen (het systeem zal die gegevens gewoon opnieuw moeten inlezen en opnieuw cachen van de schijf, wat je server eigenlijk een tijdje langzamer zal maken) - voretaq7


Je ervaart de Linux Ate My Ram kwestie.

Geen paniek.

Dit is geen probleem.

Uw systeem werkt zoals het is ontworpen.

Het probleem is niet uw OS - het probleem is uw begrip van wat "gratis" geheugen is.


Unix-systemen gebruiken het geheugen voor meer dan alleen het uitvoeren van programma's. Geheugen kan worden gebruikt voor:

  • Programma's uitvoeren (actief / gebruikt)
  • Buffergegevens in transit (buffers)
  • Caching-gegevens onlangs gelezen van / geschreven naar de schijf (cache)
  • Absoluut niets (gratis)

Wat volgt is een korte (en grotendeels onvolledige) rondleiding over hoe moderne Unix-systemen RAM-gebruik rapporteren.

Wat is vrij geheugen (de OS-definitie)?

Wanneer een Unix-systeem RAM meldt als Gratis het betekent "ik gebruik deze RAM nergens voor".
Gratis RAM is effectief waardeloos - Het maakt je systeem niet sneller, het zit er gewoon "vrij" voor als iets het nodig heeft. Dat iets kan een van de drie andere items zijn die ik hierboven noemde.

Wat zijn geheugen voor cache en buffer?

Cache en buffergeheugen zijn RAM die het besturingssysteem gebruikt om uw systeem sneller te maken.
Dit geheugen is niet nodig voor het uitvoeren van programma's nu, dus je besturingssysteem gebruikt het om gegevens te bewaren die het regelmatig nodig heeft - bijvoorbeeld de C-bibliotheek (die je nodig hebt bij vrijwel elk programma dat je gebruikt) wordt vrijwel altijd bijgehouden cachegeheugen, zodat het systeem niet naar de schijf hoeft te gaan om de instructies te vinden die nodig zijn om "Hello World" op het scherm af te drukken.
Het is eigenlijk een stuk ingewikkelder dan dat - er is gedeelde geheugen, bedrade geheugen, enz. - maar voor onze doeleinden is deze eenvoudige verklaring voldoende.

Wat is actief geheugen?

Actief geheugen maakt deel uit van wat we begrijpen als "gebruikt" geheugen - RAM-geheugen dat applicaties gebruiken voor wat het ook is - sorteren van spreadsheets, bedienen van webpagina's, bewerken van afbeeldingen, etc.
"Actief" geheugen is recent "actief" geweest - het programma beweert dat het gebruik heeft gemaakt van de inhoud (lezen of schrijven) en het wordt niet beschouwd als een goede kandidaat om uit te wisselen.

Wat is niet-actief geheugen?

Net als actief geheugen, is inactief geheugen RAM dat toepassingen gebruiken voor wat ze ook doen. Het verschil is dat dit geheugen een tijdje niet is gebruikt, dus als het erop aankomt, denkt het besturingssysteem dat het naar schijf kan worden geruild en (met een beetje geluk) zal het programma dat het claimt er niet nog een keer om vragen zal het nooit merken.

Wat is "Gebruikt" geheugen (de HUMAN-definitie)

Wat jij en ik beschouw als "Gebruikt" geheugen is in wezen de som van Actief en Inactief geheugen. Alle RAM die momenteel wordt geclaimd door toepassingen voor hun gebruik.
Zolang je meer geïnstalleerde RAM hebt dan de som van het actieve en inactieve geheugen (plus een mooie veiligheidsmarge van bijvoorbeeld 512-1024 MB bovenaan), zit je op een goede plek: je besturingssysteem waarschijnlijk zal niet swappen en prestaties doden.

Wat is "gratis" geheugen (de HUMAN-definitie)?

Wat jij en ik beschouw als "gratis" geheugen is het beschikbare geheugen om programma's uit te voeren.
Dit is iets gecompliceerder dan alleen het "gratis" cijfer dat uw besturingssysteem meldt. Wanneer een programma om RAM vraagt, probeert het besturingssysteem om dat RAM-geheugen op de minst storende manier te krijgen:

  • Als er gratis geheugen beschikbaar is (er is niets aan de hand), dan wordt dat RAM toegewezen.
  • Als er geen vrij geheugen beschikbaar is, kannibaliseert het besturingssysteem de Cache- en bufferruimte: de minst recent / minst vaak gebruikte spullen in de bufferpool worden weggegooid en dat RAM-geheugen wordt aan het programma gegeven.
  • Als er geen Buffer / Cache RAM is om te kannibaliseren, kijkt de swapper naar het inactieve geheugen en kiest de regio's waarvan hij denkt dat deze het minst waarschijnlijk worden gebruikt. Die gegevens zullen zijn riep uit om te wisselen (schijf) en de nieuw vrijgekomen RAM die aan het programma is gegeven.
  • Als alle inactieve RAM is verwisseld, zal de swapper Active RAM op schijf beginnen te zetten.
    (Dit gaat over waar de prestaties gewoonlijk naar de honden gaan: elke keer dat een programma de CPU aanzet, moeten de uitgewisselde bits terug in het RAM worden gebracht, wat betekent Het actieve geheugen van een ander programma moet worden verwisseld - de hoge omzet in swap wordt genoemd pak slaag)
  • Als het systeem alles heeft verwisseld (en de swappartitie heeft opgevuld) of als u een systeem gebruikt zonder een swappartitie, Slechte dingen gebeuren. Op dit punt zal een van de twee dingen gebeuren:
    • malloc() zal mislukken. Dit is het POSIX-conforme gedrag - het besturingssysteem zal het programma dat om RAM vraagt ​​vertellen dat het niet aan de aanvraag kan voldoen.
      Het programma kan om minder RAM vragen, of als het geen genoegen kan nemen met een kleiner geheugen, kan het opschonen en afsluiten. (Als het programma slecht is geschreven, crasht het gewoon.)
    • Als je een Linux-box gebruikt, is de OOM-Killer kan gaan rijden in een bende-door spree te doden, andere processen beëindigen om te proberen voldoende RAM vrij te maken om aan de aanvraag te voldoen.
      In het geval dat u hier niet kunt vertellen aan de hand van mijn beschrijving en mijn antwoord op de gekoppelde vraag, denk ik dat dit een vreselijke manier is om het probleem aan te pakken.

Waarom gaat Free RAM omhoog wanneer u bestanden verwijdert?

In het voorbeeld van de vraag hier heb je gemerkt dat het mogelijk is om RAM "vrij" te maken door het back-upbestand te verwijderen - de verklaring daarvoor is vrij eenvoudig: Omdat niets dat bestand gebruikt (geen open bestandshandvatten) en het niet meer toegankelijk is vanaf het bestandssysteem (ontkoppeld), weet het besturingssysteem dat niemand ooit die gegevens opnieuw zal openen en worden de gegevens verwijderd uit de cache van het bestandssysteem.
Hierdoor meldt het besturingssysteem meer vrij geheugen, maar dit heeft geen invloed op de systeemprestaties.


61
2017-11-16 05:10



Nu is het volkomen duidelijk voor mij ... Mijn Linux-ervaring is ongeveer 2 maanden, het begon allemaal met deze Debian-server. Een maand geleden heb ik Gentoo op mijn thuislaptop geïnstalleerd en was ik zo verbaasd over de prestaties, die volledig veranderden van Windows-gebruiker naar Linux-gebruiker, zelfs op mijn werkcomputer. Het is geweldig om Linux te leren met Gentoo, en toch is er ontzettend veel te leren.
@ stan31337 Je bent niet de enige waar het onduidelijk voor is - het is vooral moeilijk voor mensen die afkomstig zijn van een Windows-achtergrond, tenzij je er niet in boort, rapporteert Windows het geheugengebruik niet met dit detailniveau - het is gewoon "Gebruikt" (door programma's) ) en "Vrij" (voor programma's die moeten worden gemaakt). Mac-gebruikers hebben het weinig gemakkelijker omdat Activity Monitor in feite een grafische versie is van top en rapporteert vrij / bekabeld / actief / inactief RAM. - voretaq7
Waar ik vroeger mee werkte Process Explorer in Windows had het heel wat geheugen-dingen te laten zien, maar de meeste waren zo onduidelijk voor mij, dat ik er eigenlijk niet naar keek ...
Merk ook op dat hoewel Windows dat meestal niet doet laat het zien in zoveel details heeft het een heel gelijkaardige opstelling. - Joachim Sauer
Weet je, zelfs in Windows is de geheugenuitlezing verwarrend. Dit is iets waar OS-makers misschien meer nadruk op willen leggen, of liever iets waar gebruikers zich minder druk over moeten maken dan nu het geval is. - gparent


Iets anders om te controleren of het bovenstaande mislukt:

Controleer het gebruik van de Slab cache (Slab:, SReclaimable: en    SUnreclaim: in /proc/meminfo). Dit is een cache van in-kerneldata   structuren, en staat los van de pagina cache gerapporteerd door free.

Als de plakcache verantwoordelijk is voor een groot deel van uw "vermissing"   geheugen ", check /proc/slabinfo om te zien waar het weg is. Als het is   tentries of inodes, die u kunt gebruiken sync ; echo 2 > /proc/sys/vm/drop_caches om van ze af te komen.

U kunt ook de slabtop hulpmiddel om het huidige gebruik van de te tonen   Slab cache in een vriendelijk formaat. c zal de lijst sorteren op huidig   cache grootte.

Van: https://stackoverflow.com/a/5467207


2
2018-02-21 15:57