Uitgebreide handleiding over geheugenlekken in Linux

Laatste update: 14/05/2026
Auteur: Isaac
  • Geheugenlekken in Linux verminderen ongemerkt de prestaties en activeren uiteindelijk de OOM Killer als ze niet tijdig worden gedetecteerd.
  • Met tools zoals top, htop, /proc, pmap en smem kunt u verdachte processen opsporen en analyseren hoe hun geheugenverbruik toeneemt.
  • Valgrind, memleax, gdb en andere profilers helpen bij het identificeren van de exacte bron van geheugenlekken en geheugenbeheerfouten in de code.
  • Belastingstests, resourcebeperkingen en goede programmeerpraktijken zijn essentieel om ernstige geheugenlekken in productieomgevingen te voorkomen.

Handleiding voor geheugenlekken in Linux

Als je ooit een keukenkraan hebt gehad die langzaam lekt, weet je hoe verraderlijk lekkages kunnen zijn: in het begin lijken ze onschuldig, maar na verloop van tijd veroorzaken ze veel problemen. Geheugenlekken in Linux zijn precies hetzelfde : ze beginnen als een bijna onmerkbaar druppeltje en leggen uiteindelijk een service, een cruciale microservice of zelfs een hele server plat.

In een systeem dat altijd beschikbaar moet zijn (servers, productiecontainers, embedded systemen, enz.), is een ongemonitord geheugenlek als een tikkende tijdbom. Als je het niet monitort, detecteert en verhelpt , krijg je te maken met processen die worden beëindigd door de OOM Killer, willekeurige crashes en boze gebruikers die niet helemaal begrijpen wat er is gebeurd. In deze tutorial bekijken we in detail, maar in begrijpelijke taal, hoe je geheugenlekken in Linux kunt detecteren en analyseren met behulp van alles, van basistools zoals top/htop tot geavanceerde profilers zoals Valgrind, memleax en gdb , en hulpprogramma's zoals /proc, pmap en smem.

Wat is een geheugenlek in Linux en waarom is het zo gevaarlijk?

Een geheugenlek treedt op wanneer een programma Het reserveert systeemgeheugen (heap, structuren, buffers, enz.) en geeft dit nooit vrij. wanneer het niet langer nodig is. In talen zoals C of C++ vertaalt dit zich meestal in aanroepen naar malloc, calloc, new die niet vergezeld gaan van hun corresponderende free o deleteof in verwijzingen die vastlopen en het onmogelijk maken om dat geheugen opnieuw te gebruiken.

In de praktijk blijft het proces normaal draaien, maar het geheugenverbruik neemt geleidelijk toe bij elke aanvraag, elke werkcyclus of elke nieuwe taak. Deze groei kan erg langzaam verlopen (in de orde van enkele KB of MB per dag), waardoor het zonder goede monitoring bijzonder moeilijk is om dit visueel te detecteren.

De gevolgen van het negeren van dit probleem zijn duidelijk: verminderde prestaties, constante swaps, enorme latenties en uiteindelijk raakt het systeem zonder beschikbaar geheugen. Dat is waar de OOM Killer van de Linux-kernel in beeld komt : deze beëindigt de processen die het meeste geheugen verbruiken (of die het algoritme als het minst belangrijk beschouwt) om te voorkomen dat het hele systeem crasht.

Dit gedrag is meestal heel duidelijk zichtbaar in monitoringgrafieken: het RSS-geheugen van een proces neemt dagenlang geleidelijk toe, totdat het plotseling keldert op het moment dat de OOM Killer het proces beëindigt en de service opnieuw opstart. Als niemand deze gebeurtenissen analyseert, blijft het lek bestaan ​​en herhaalt de cyclus zich.

Daarom is het cruciaal om te begrijpen dat geheugenlekken niet alleen een codeprobleem zijn , maar ook een operationeel en waarneembaar probleem: je moet weten hoe je ze in productie kunt detecteren, ze kunt correleren met systeemgebeurtenissen en tools hebben om ze te analyseren, zowel in processen die al draaien als in testomgevingen.

Typische oorzaken en duidelijke symptomen van een geheugenlek.

Vanuit een ontwikkelingsperspectief zijn de meest voorkomende oorzaken van geheugenlekken doorgaans programmeerfouten en gebrekkig resourcebeheer . Veelvoorkomende redenen zijn onder andere: vergeten geheugen vrij te geven, het onderhouden van geheugenstructuren die nooit worden opgeschoond, het niet sluiten van descriptors met een bijbehorende buffer, of het gebruik van externe bibliotheken met interne bugs.

Bij langlopende applicaties, zoals daemons, webservices of batchprocessen die nooit opnieuw opstarten, worden de problemen verergerd omdat elk klein lek zich in de loop der tijd ophoopt . Zelfs een zeldzame bug die alleen in een specifiek geval voorkomt, kan uiteindelijk RAM-geheugen verbruiken als het proces maandenlang actief blijft.

De symptomen die alarm moeten slaan, zijn vrij herkenbaar als je weet waar je op moet letten. Het meest voor de hand liggende is dat het geheugen (RES/RSS) van een proces continu toeneemt, zelfs als de werkbelasting stabiel blijft. Het is alsof je de brandstofmeter ziet dalen in een geparkeerde auto.

Een ander typisch gevolg is de geleidelijke verslechtering van de prestaties . Het systeem begint swapgeheugen te gebruiken, de latentie schiet omhoog, query's of verzoeken die voorheen snel waren, worden eindeloos lang en ook de overige processen van de host lijden eronder, zelfs als ze niet de directe oorzaak zijn.

Ten slotte doet zich het meest dramatische symptoom voor: onverwachte crashes van processen of het hele systeem . De kernel, die geen geheugen meer kan toewijzen, activeert de Out-of-Memory Killer en beëindigt processen. Als het een geïsoleerde microservice betreft die crasht, is het nog een klein probleem, maar als bijvoorbeeld de database of de wachtrijbeheerder uitvalt, kunnen de gevolgen zeer ernstig zijn.

Een zeer effectieve manier om deze gevallen in een productieomgeving te identificeren, is door geheugengrafieken te combineren met systeemgebeurtenislogboeken , inclusief die gegenereerd door de OOM Killer. Als u op uw dashboards een patroon ziet in het geheugenverbruik dat langzaam toeneemt en vervolgens plotseling daalt, en op dat exacte moment één of meer OOM Killer-gebeurtenissen plaatsvinden, dan is er vrijwel zeker sprake van een geheugenlek in dat proces.

Basismonitoring met top en htop

Voor een eerste aanpak hoef je het niet te ingewikkeld te maken: tools zoals top en, met name, htop zijn perfect om in realtime te zien welke processen je geheugen belasten. Ze fungeren als een snel controlepaneel om de boosdoeners te identificeren.

  Wat is WPF (Windows Presentation Foundation): een complete gids voor architectuur, XAML, besturingselementen, lay-out, gegevens, afbeeldingen en aanpassingen

In de meeste distributies kun je htop eenvoudig installeren met behulp van de pakketbeheerder. Op Debian-gebaseerde systemen zou zoiets als dit volstaan:

sudo apt install htop

Na installatie, wanneer je het uitvoert htop Je ziet een interactieve weergave van processen met kleuren, CPU- en geheugenbalken en verschillende kolommen. De belangrijkste kolommen voor het opsporen van lekken Het betreft het interne geheugen en het virtuele geheugen van het proces:

- RES / RSS (Resident Set Size): het fysieke geheugen dat het proces momenteel in RAM-geheugen heeft.
- GERESPECTEERD (Virtueel geheugen): het totale virtuele geheugen dat het proces heeft toegewezen (inclusief toegewezen en mogelijk verwisseld geheugen).
- %MEM: percentage van het fysieke RAM-geheugen dat het proces verbruikt ten opzichte van het totale systeem-RAM-geheugen.

Als je sorteert op RES of %MEM en htop een tijdje open laat staan, kun je de ontwikkeling van de processen observeren. Als een van de processen in deze kolommen langzaam blijft toenemen zonder ooit weer af te nemen , duidt dit op een geheugenlek of, op zijn minst, op een slecht geheugengebruik.

Hoewel top subtieler is, biedt het ook de mogelijkheid om deze waarden te bekijken en gedurende een bepaalde periode te volgen, maar htop maakt langdurige observatie en filtering van specifieke processen waarin u geïnteresseerd bent veel eenvoudiger.

Een diepere duik in het /proc-bestandssysteem

Om van een oppervlakkige blik naar een meer verfijnde analyse te gaan, onthult Linux gedetailleerde informatie over elk proces in het pseudo-bestandssysteem /procElke PID heeft zijn eigen map daarin. /procDaar kunt u allerlei statistieken bekijken, waaronder gegevens met betrekking tot het geheugen.

Een klassiek startpunt is het bestand. /proc//status, waar je velden vindt zoals VmRSS, VmSize of VmDataJe kunt ze eenvoudig bekijken met:

cat /proc/<pid>/status

In die uitvoer zijn de meest interessante velden voor het opsporen van geheugenlekken:

- VmRSS: het residentiële geheugen (in KB) dat het proces op dat moment in het RAM-geheugen heeft.
- VmSize: totaal virtueel geheugen dat aan het proces is gekoppeld (inclusief alles wat is toegewezen).
- VmData: het datasegmentgeheugen, waar dynamische structuren en heaps zich gewoonlijk bevinden, een gebied dat zeer gevoelig is voor geheugenlekken.

Het praktische idee is om deze waarden regelmatig te controleren (handmatig of met behulp van scripts) en te observeren of ze een consistente stijgende trend vertonen. Als je ziet dat VmRSS en met name VmData toenemen zonder af te nemen tijdens perioden met lage belasting, is dat een vrij sterke aanwijzing dat de applicatie geheugen lekt.

Plus status, en /proc/ Je hebt nog andere interessante bestanden om de geheugenkaart te analyseren, zoals: maps o smaps, hoewel ze uitgebreider zijn en vaak in combinatie met andere tools worden gebruikt, zoals pmap om de informatie beter leesbaar te maken.

Geheugenkaartanalyse van een proces met behulp van pmap

Het hulpprogramma `pmap` is een zeer nuttig commando om een ​​georganiseerd overzicht te krijgen van de geheugenkaart van een specifiek proces. Het toont in essentie welke adresbereiken het proces heeft toegewezen, de grootte van elk bereik, de bijbehorende machtigingen en het corresponderende bestands-, bibliotheek- of geheugentype.

Om het te gebruiken, start u eenvoudigweg:

pmap

In de uitvoer ziet u regels met het startadres, de grootte, de machtigingen (lezen, schrijven, uitvoeren) en de herkomst (bijvoorbeeld het hoofdprogramma, een gedeelde bibliotheek zoals...). libcanonieme gebieden, de stapel, enz.). Anonieme geheugenregio's en de heapzone Dit zijn de signalen die doorgaans aanwijzingen geven bij geheugenlekken.

Een praktische manier om de voortgang bij te houden is door te herhalen. pmap zo nu en dan controleren of bepaalde segmenten (vooral anonieme segmenten die betrekking hebben op de heap) ze houden niet op met groeienJe kunt de uitvoer ook filteren of samenvatten, bijvoorbeeld:

pmap <pid> | grep total

Dit geeft u een overzicht van het totale geheugen dat door het proces in gebruik is. Als dat getal gedurende meerdere uren blijft stijgen en niet stabiliseert of daalt zoals zou moeten, wijst dit opnieuw op een geheugenlek of inefficiënt beheer van interne buffers.

smem: onderscheid maken tussen gedeeld geheugen en het daadwerkelijke gebruik van elk proces

Tools zoals top, htop of pmap tellen al het geheugen waarnaar een proces verwijst, maar ze maken geen duidelijk onderscheid tussen het geheugen dat echt exclusief voor dat proces is en het geheugen dat met anderen wordt gedeeld (bijvoorbeeld gedeelde bibliotheken). Dat is waar smem van pas komt , een specifiek hulpprogramma dat een nauwkeuriger beeld geeft.

Het grote voordeel van smem is dat het statistieken berekent zoals USS (Unique Set Size), PSS (Proportional Set Size) en RSS , waardoor een beter inzicht wordt verkregen in het werkelijke geheugengebruik per proces: hoeveel geheugen is specifiek voor dat proces en hoeveel wordt gedeeld met andere processen die dezelfde bibliotheken laden of pagina's delen.

Enkele van de meest relevante meetwaarden die u in de smem-uitvoer zult zien, zijn:

- USS (Unieke setgrootte): geheugen dat alleen door dat proces wordt gebruikt; als het proces verdwijnt, wordt dat gedeelte van het geheugen volledig vrijgegeven.
- PSS (Proportioneel verdeelde geheugengrootte): verdeelt het gedeelde geheugen over alle processen die het gebruiken, waardoor een redelijk evenredig beeld van de werkelijke geheugenvoetafdruk wordt verkregen.
- RSS (Resident Set Size): Resident geheugen, zoals in andere tools, maar ter vergelijking samen met bovenstaande weergegeven.

Bij het uitvoeren van zoiets als smem -k Je krijgt een tabel met PID, gebruiker, commando en deze kolommen voor geheugengebruik. Het interessante, met het oog op geheugenlekken, is om je vooral te richten op de USSomdat het het eigen geheugen van de applicatie weerspiegelt, en dat is waar de ernstigste geheugenlekken zich doorgaans voordoen.

Als je smem periodiek uitvoert (of integreert in monitoringscripts) en ziet dat de USS van een bepaald proces in de loop van de tijd blijft toenemen , zelfs wanneer de belasting ervan niet toeneemt, is dat gedrag een sterke indicatie van een geheugenlek in het specifieke geheugengedeelte van dat proces.

  WSL9x: Zo draait Linux binnen Windows 95 zonder virtuele machine.

memleax: automatische lekdetectie in actieve processen

Als je een proces hebt geïdentificeerd dat geheugen lijkt te lekken en je wilt verder onderzoek doen zonder het proces opnieuw op te starten, is Memleax een zeer nuttig hulpmiddel . Het grootste voordeel is dat je hiermee in realtime geheugenlekken kunt detecteren in een proces dat al draait , zonder dat je het hoeft te hercompileren of opnieuw te starten met een speciaal commando.

Memleax wordt voornamelijk in pakketvorm gedistribueerd. .rpm y .debHet is beschikbaar in sommige repositories, zoals die voor Arch Linux en FreeBSD. Op Debian-gebaseerde systemen is een gebruikelijke manier om het te installeren het downloaden van het pakket vanuit de officiële GitHub-repository en het vervolgens te gebruiken. dpkg Om het te installeren, moet je de afhankelijkheden oplossen met je pakketbeheerder.

Na installatie kunt u memleax aan een proces koppelen met:

sudo memleax -p

Vanaf dat moment onderschept memleax geheugentoewijzingsaanroepen (zoals malloc) en registreert de adressen en afmetingen die het proces reserveert. Wanneer het systeem detecteert dat een toewijzing niet correct is vrijgegeven, markeert het expliciet als een geheugenlek, met vermelding van de blokgrootte en het verantwoordelijke adres.

De typische uitvoer toont regels van de stijl malloc(128) = 0x... gevolgd, wanneer er een probleem is, door berichten die zoiets aangeven als Geheugenlek gedetecteerd voor een specifiek blok. Deze informatie is erg nuttig omdat het aangeeft dat, hoewel het proces nog steeds actief is en werkt, er blokken zijn die 'verweesd' raken.

Memleax is met name aantrekkelijk voor productie- of pre-productieomgevingen waar het niet mogelijk is om de service volledig opnieuw op te starten met een debugger of Valgrind, maar waar wel inzicht nodig is in het dynamische geheugenbeheer.

Het geheugen van een proces grondig inspecteren met gdb

Als je nog meer details nodig hebt en bereid bent om meer diepgaande foutopsporing toe te passen, dan is de GNU Debugger (gdb) je beste vriend. Het is een krachtig hulpmiddel waarmee je je kunt koppelen aan een actief proces , variabelen kunt inspecteren, de aanroepstack kunt bekijken en natuurlijk de status van het geheugen kunt controleren.

Om te beginnen installeer je gdb vanuit de repositories van je distributie (bijvoorbeeld met sudo apt install gdb (op Debian/Ubuntu) en koppel het vervolgens aan een proces met:

sudo gdb -p

Eenmaal in de gdb-sessie kunt u diverse heap-gerelateerde commando's gebruiken. In sommige omgevingen is het commando direct beschikbaar. heap (of extensies die dit mogelijk maken) om de dynamische geheugenblokken die momenteel in gebruik zijn weer te geven, met hun adressen en groottes. De uitvoer toont iets als een lijst met geheugenblokken, elk met een adres en grootte, gemarkeerd als in gebruik.

Bovendien kun je vanuit gdb libc-functies aanroepen, zoals: malloc_stats() door:

(gdb) call malloc_stats()

Dit type aanroep geeft een samenvatting van de status van de geheugenallocator: hoeveel geheugen is toegewezen, hoe de heap is verdeeld, enzovoort. Het is een relatief snelle manier om te zien of het door het proces toegewezen geheugen ongecontroleerd groeit.

Een andere krachtige aanpak is om te plaatsen breekpunten in functies zoals malloc o free Om in realtime te observeren hoe de code zich gedraagt: hoe vaak er geheugen wordt gereserveerd, op welke momenten het wordt vrijgegeven, welke codefragmenten veel geheugen toewijzen maar weinig vrijgeven... Hoewel dit meer expertise op het gebied van debuggen vereist, is het een directe manier om de exacte bron van de geheugenlekken te lokaliseren.

Valgrind: de klassieke geheugenprofiler in Linux

Bij het bespreken van geheugenlekdetectie in Linux-omgevingen is het onmogelijk om Valgrind niet te noemen . Valgrind is meer dan een op zichzelf staande tool; het is een framework voor debuggen en profileren dat verschillende modules bevat, waarvan Memcheck de bekendste en meest gebruikte is . Deze module is specifiek ontworpen om geheugenproblemen op te sporen.

Memcheck werkt door uw programma uit te voeren in een virtuele machine die alle geheugenbewerkingen onderschept en bewaakt : toewijzingen, vrijgaven, adresaanvragen, enz. Bovendien vervangt het de standaard geheugenallocator van C door een eigen versie, die extra beveiligingen introduceert rond gereserveerde blokken om toegang buiten het bereik te detecteren.

Tot de soorten fouten die Memcheck kan detecteren behoren: gebruik van niet-geïnitialiseerd geheugen, lees-/schrijfbewerkingen na het vrijgeven van geheugen , illegale toegang tot geheugengebieden die niet bij het programma horen en natuurlijk geheugenlekken van verschillende typen (blokken die definitief verloren zijn gegaan, mogelijk verloren zijn gegaan, nog bereikbaar zijn, enz.).

Het basisgebruik is relatief eenvoudig. Je compileert je programma met debugsymbolen (bijvoorbeeld met -g o -gstabs) en vervolgens voer je het uit onder Valgrind met iets als:

valgrind --tool=memcheck --leak-check=full -v ./tu_programa

In een programma dat het geheugen goed beheert, zal de uitvoer van Memcheck een overzicht van fouten tonen met nul incidenten . Dat wil zeggen: geen illegale leesbewerkingen, geen schrijfbewerkingen buiten het bereik en geen heapbytes in gebruik wanneer het programma wordt afgesloten. Dit is meestal de eerste stap: het controleren van een "schone" uitvoering om te zien hoe een schone uitvoering eruitziet.

Als je opzettelijk een malloc introduceert zonder de bijbehorende free , of een ander geheugenlekpatroon gebruikt, en vervolgens het binaire bestand opnieuw uitvoert met Valgrind, zie je een HEAP SUMMARY in de uitvoer die aangeeft hoeveel geheugen er nog "in gebruik" is nadat de applicatie is voltooid. Onder het LEAK SUMMARY -gedeelte zie je regels zoals "definitely lost" met de bytes en blokken die niet zijn vrijgegeven.

Bovendien zal Memcheck u precies vertellen wat er aan de hand is. waarbij de toewijzing die het lek veroorzaakte, plaatsvondJe ziet een oproeptrace met functies, bronbestanden en regelnummers. Het kan bijvoorbeeld laten zien dat een malloc op een bepaalde regel van uw bestand .c Het heeft een blok gecreëerd dat nooit is vrijgegeven, waardoor de bron van het probleem onmiddellijk aan het licht is gekomen.

Valgrind is ook zeer effectief in het opsporen van andere klassieke fouten: bijvoorbeeld, illegale geschriften in het geheugen (zoals schrijven naar adres 0 of buiten de grenzen van een array), gebruik van niet-geïnitialiseerde variabelen (weergave van berichten zoals "Voorwaardelijke sprong of verplaatsing is afhankelijk van niet-geïnitialiseerde waarde(n)") of onjuiste releases (hoe doe je dat?) free op een aanwijzer die niet afkomstig is van malloc(of hetzelfde blok twee keer vrijgeven).

  Linux-beveiliging: een uitgebreide gids voor back-ups en noodherstel

In al deze gevallen geeft het Memcheck-rapport gedetailleerd aan waar de foutieve toegang of illegale vrijgave van geheugen plaatsvond, welke functie dit veroorzaakte en in welk deel van de code de variabele werd aangemaakt of het geheugen werd gereserveerd. Dit maakt het een vrijwel onmisbaar hulpmiddel voor het grondig debuggen van geheugenbeheer in C en C++.

Andere geheugenprofilers: gperftools, Massif en andere

Hoewel Valgrind-Memcheck vaak de eerste keuze is, zijn er andere profilingtools die de analyse van geheugenlekken en gebruikspatronen zeer goed aanvullen. Een daarvan is... gperftools (voorheen Google Performance Tools), waaronder een heap profiler in staat om het geheugengebruik in de loop van de tijd te registreren en visuele rapporten te genereren (bijvoorbeeld met pprof) die laten zien welke delen van de code meer geheugen reserveren.

Een andere tool uit de Valgrind-familie is Massif , die zich specifiek richt op het profileren van het heapgeheugen . In plaats van zich alleen op fouten te concentreren, meet Massif de heapgrootte gedurende de uitvoering en genereert gegevens die je vervolgens kunt visualiseren om te begrijpen in welke fasen van je programma de geheugengroei het grootst is en welke structuren of functies daarvoor verantwoordelijk zijn.

Over het algemeen werken deze profilers door geheugenbewerkingen te onderscheppen, vergelijkbaar met Valgrind, of door instrumentatiebibliotheken te gebruiken, en ze registreren gedetailleerde statistieken van toewijzingen en vrijgaven . Uiteindelijk leveren ze rapporten met onder andere het aantal toewijzingen, de totale gereserveerde grootte, specifieke locaties in de code waar de zwaarste toewijzingen plaatsvinden, en natuurlijk blokken die nooit worden vrijgegeven.

De gebruikelijke workflow omvat het uitvoeren van het programma onder de profiler (in een gecontroleerde omgeving die zo dicht mogelijk bij de productieomgeving ligt), het reproduceren van de workload of het gebruiksscenario waarvan u vermoedt dat het het lek veroorzaakt, en vervolgens het analyseren van de gegenereerde rapporten met grafische of commandoregeltools. Dit geeft u in één oogopslag inzicht in welke codefragmenten ongecontroleerd geheugengebruik veroorzaken.

Proactieve strategieën: belastingstests, limieten en beste praktijken

Al het bovenstaande helpt bij het opsporen van problemen zodra ze zich al voordoen, maar de ideale strategie is om te voorkomen dat lekken de productieomgeving bereiken of ze in ieder geval zo snel mogelijk te ontdekken. Om dit te bereiken, is het raadzaam om verschillende tactieken te combineren die te maken hebben met testen, systeemconfiguratie en codekwaliteit.

Allereerst is het volkomen logisch om dat te doen. Belastings- en stresstests in pre-productieomgevingen die zo realistisch mogelijk zijn. Hulpmiddelen zoals Apache JMeter, Locust, stress Vergelijkbare tools stellen je in staat om gelijktijdige gebruikers, intensieve verzoeken of langdurige scenario's te simuleren. Tijdens deze tests moet je de geheugenstatistieken (RSS, heap, enz.) nauwlettend in de gaten houden om te zien of er problemen zijn. langzame maar continue groei.

Parallel daaraan is het raadzaam om niet alleen ruwe meetwaarden te monitoren, maar ook systeemgebeurtenissen zoals die van de OOM Killer . Observatie- en logmonitoringsplatformen kunnen deze informatie verzamelen en u waarschuwen wanneer er bijvoorbeeld OOM-gebeurtenissen op een specifieke host ophopen, wat meestal duidt op processen die niet goed functioneren of een gebrek aan resources.

Op het niveau van de systeemconfiguratie biedt Linux mechanismen voor de impact beperken van een proces dat ‘uit de hand loopt’​ Bijvoorbeeld met ulimit Je kunt geheugenlimieten opleggen aan processen die door een specifieke gebruiker worden gestart, waardoor de grootte van hun virtueel geheugen wordt beperkt. Zoiets als dit: ulimit -v <kilobytes> Dit voorkomt dat één enkele service al het RAM-geheugen van de host in beslag neemt.

Voor meer geavanceerde scenario's kunt u met behulp van cgroups (control groups) het gebruik van resources (CPU, geheugen, I/O, enz.) per groep processen isoleren en beperken. U kunt een cgroup aanmaken met een specifieke geheugenlimiet en er een service aan toewijzen, zodat de schade bij een geheugenlek beperkt blijft tot die groep en niet het hele systeem aantast.

Tot slot blijft, wat betreft ontwikkeling, de beste verdediging Schrijf code die vanaf het begin goed met het geheugen omgaat.In C/C++ houdt dit in dat je bij elk aspect nauwgezet te werk moet gaan. malloc/new en het bijbehorende free/delete, gebruik RAII-patronen, slimme pointers (zoals std::shared_ptr, std::unique_ptren vermijd het bewaren van onnodige referenties. U kunt ook een Rust-handleiding Voor geheugenveilige alternatieven. In talen met garbage collectors (Java, C#, Go, Python, JavaScript, enz.) is het ook gemakkelijk om pseudo-lekken te veroorzaken als je actieve verwijzingen naar objecten behoudt die je niet meer nodig hebt.

Statische analysetools zoals cppcheck, SonarQube en vergelijkbare tools helpen bij het opsporen van verdachte codepatronen tijdens de ontwikkeling. Als je dit combineert met zorgvuldige codebeoordelingen, unit tests die het gedrag onder belasting verifiëren en regelmatige uitvoeringen van Valgrind of andere profilers in CI-omgevingen, wordt de kans dat een ernstige kwetsbaarheid de productieomgeving bereikt aanzienlijk verkleind.

Kortom, het beheersen van geheugenlekken in Linux vereist een combinatie van continue monitoring, krachtige diagnostische tools en goede programmeerpraktijken . Met `top`, `htop`, `/proc`, `pmap` en `smem` kunt u verdachte processen lokaliseren; met `memleax` en `gdb` kunt u live inspecties uitvoeren; met `Valgrind`, `gperftools` of `Massif` kunt u grondig debuggen en profileren; en met belastingstests, systeemlimieten en goed geschreven code kunt u voorkomen dat het probleem zich op het slechtst mogelijke moment voordoet.

Apache JMeter-handleiding
Gerelateerd artikel:
Complete Apache JMeter-handleiding voor prestatietesten