Hoe een geheugenlek in Ubuntu te detecteren

Er zijn verschillende redenen waarom een ​​geheugenlek kan optreden op Ubuntu, maar gelukkig is het duidelijk wanneer ze zich voordoen. Buggy-code is vaak de grootste reden, omdat programmeurs mogelijk niet de gelegenheid hebben gehad om te controleren of het geheugen dat niet langer nodig is, wordt vrijgegeven. Als u instabiele pakketten hebt geïnstalleerd of code uit de broncode hebt gecompileerd, heeft u om deze reden mogelijk te maken met geheugenlekken. Je zult ze waarschijnlijk gaan opmerken, omdat softwaretoepassingspakketten beginnen te klagen over onvoldoende geheugen als je meer dan voldoende fysiek RAM hebt geïnstalleerd.

Als u zich zorgen maakt over een geheugenlek, probeert u gratis herhaaldelijk in een terminal te typen. Als je plotseling het gebruik van RAM snelgroeiend begint te zien, heb je al een geheugenlek gedetecteerd. Mocht u een foutmelding krijgen die iets leest als bash: Niet genoeg geheugen terwijl u dit doet en u hebt niets anders dan een terminal of zelfs alleen maar een virtuele console geopend, dan bent u er bijna zonder twijfel mee bezig. Sommige geheugenlekken kunnen een beetje subtieler zijn, maar Ubuntu en de verschillende spin-offs bevatten hulpmiddelen en pakketten die u kunnen helpen deze te detecteren.

Detecteren van geheugenlekken in Ubuntu

Omdat de hulpprogramma's voor het detecteren van geheugenlekken voornamelijk zijn gebaseerd op de CLI-prompt, maakt het niet uit in welke versie van Ubuntu u deze uitvoert. Deze zouden prima moeten werken in een Unity-terminal in reguliere Ubuntu, vanaf een virtuele console in Ubuntu Server, vanaf een lxterm in Lubuntu, een Konsole in Kubuntu of zelfs in Xfce in Xubuntu. Voer een eenvoudige taak uit zoals sudo -s en typ uw wachtwoord om te beginnen.

Dit zou u een root shell moeten geven als deze correct wordt uitgevoerd, maar kan een geheugenfout veroorzaken als u werkt met een lek dat al te ver is gegaan. Als je inderdaad toegang hebt tot een rootshell, probeer dan echo 3> / proc / sys / m / drop_caches, druk op de enter-toets en typ exit. Probeer het gratis of -m opnieuw uit te voeren om te zien of dat heeft geholpen om geheugen vrij te maken.

Sommige programmeurs beweren dat het geen zin heeft om de kernel te dwingen zijn caches te laten vallen, omdat ze moeten worden gespoeld en dus worden teruggewonnen zodra er extra fysiek geheugen nodig is. Hoewel het doorspoelen van deze caches de systeemprestaties zal schaden, moet u er rekening mee houden dat dit slechts een test is. Nadat je het systeem opnieuw hebt opgestart, moet de Linux-kernel de geheugencaches opnieuw samenstellen zoals ze waren in de eerste plaats.

Een paar mensen hebben voorgesteld om de lijnsynchronisatie toe te voegen; sudo echo 3> / proc / sys / vm / drop_caches naar een script dat cron consistent uitvoert, maar dit verslaat het doel van geheugencaching in de eerste plaats. Vrij geheugen zelf is slechts een ongebruikt RAM-geheugen en dat betekent dat gegevens moeten worden geladen van veel langzamere elektromechanische gegevens

Mocht Ubuntu je een ongebruikelijke fout over top geven, probeer dan in plaats daarvan busybox-top uit te geven om toegang te krijgen tot een nog eenvoudiger versie van dit programma. Als u eenmaal een lijst hebt, kijkt u naar de% MEM of vergelijkbare kolom om te zien welke applicaties het meeste geheugen hebben toegewezen. Hoewel je de PID zou kunnen noteren en een kill-commando zou kunnen geven tot het exacte aantal van de PID, zal dit alleen maar de toepassing dwingen te sluiten. Het geheugen dat ze gebruiken kan nog steeds niet worden vrijgegeven nadat je dit hebt gedaan, hoewel het natuurlijk de moeite waard is.

PRO TIP: Als het probleem zich voordoet met uw computer of een laptop / notebook, kunt u proberen de Reimage Plus-software te gebruiken die de opslagplaatsen kan scannen en corrupte en ontbrekende bestanden kan vervangen. Dit werkt in de meeste gevallen, waar het probleem is ontstaan ​​door een systeembeschadiging. U kunt Reimage Plus downloaden door hier te klikken

Als u een toepassing vindt die veel geheugen gebruikt, drukt u op q om te stoppen en probeert u #### te doden met het PID-nummer van het vorige scherm. Systeemprocessen mogen niet op deze manier worden gedood en evenmin dat iets waar u niet-opgeslagen in werkt. Denk hierbij aan het doden van iets met de takenlijst Ctrl + Alt + Del, die u ook voor ditzelfde proces kunt gebruiken.

Wanneer u een programma hebt gevonden dat dit voortdurend overkomt, kunt u het configureren om het gedrag in de toekomst te voorkomen. Elk individueel programma zal natuurlijk een ander verhaal nodig hebben, wat verder gaat dan alleen het detecteren van geheugenlekken.

Moet je niet alleen toepassingen voor probleemoplossing zijn, maar ook echt met code werken, dan zijn er nog een paar andere bronnen die je hebt. Ubuntu en zijn afgeleiden bieden je de membarrier, memusage en memusagestat C routines voor programmeren.

Gebruik gewoon man membarrier, man memusage of man memusagestat om de Linux Programmer's Manual pagina's over deze belangrijke routines te bekijken. Als er in toekomstige versies van de bibliotheken upgrades zijn wanneer nieuwe versies van Ubuntu verschijnen, worden de wijzigingen hier altijd beschreven.

Als u grafische inhoud nodig hebt, biedt memusagestat zelfs de mogelijkheid om een ​​grafische weergave van geheugengebruik op te slaan in een PNG-bestand. Dit maakt het ook een aantrekkelijke functie voor auteurs van hulpprogramma's, omdat het kan worden gebruikt om toepassingen te maken die regelmatig controleren op geheugenlekken.

Mogelijk wilt u ook memprof installeren, dit is een hulpmiddel voor het profileren van geheugengebruik om u te helpen bij het vinden van geheugenlekken. Het genereert een profiel met betrekking tot hoeveel geheugen elke functie in een programma dat u schrijft toewijst. Het kan ook bestaand geheugen scannen om blokken te vinden die zijn toegewezen, maar die niet langer over echte referenties beschikken. Dit gebeurt door een bibliotheek vooraf te laden om de geheugentoewijzingsfuncties van de standaard C-bibliotheek te onderdrukken.

Als u van plan bent om dit te gebruiken, zorg er dan voor dat u de include-memproflijn verwijdert uit het begin van uw code voordat u deze vrijgeeft. Dit wordt gebruikt om ervoor te zorgen dat u geen lekken heeft, maar het zou geen afhankelijkheid moeten worden als u uw code verpakt en deze in een repository publiceert.

PRO TIP: Als het probleem zich voordoet met uw computer of een laptop / notebook, kunt u proberen de Reimage Plus-software te gebruiken die de opslagplaatsen kan scannen en corrupte en ontbrekende bestanden kan vervangen. Dit werkt in de meeste gevallen, waar het probleem is ontstaan ​​door een systeembeschadiging. U kunt Reimage Plus downloaden door hier te klikken

Facebook Twitter Google Plus Pinterest