Hvordan oppdage et minnelekkasje i Ubuntu



Prøv Instrumentet Vårt For Å Eliminere Problemer

Det er flere grunner til at minnelekkasje kan oppstå på Ubuntu, men heldigvis er det åpenbart når de oppstår. Buggy-kode er ofte den største grunnen, siden programmerere kanskje ikke hadde hatt muligheten til å sjekke for å sikre at minne som ikke lenger er nødvendig blir frigitt. Hvis du har installert ustabile pakker eller kompilert kode fra kilden, kan det hende du har å gjøre med minnelekkasjer av denne grunn. Du vil sannsynligvis begynne å legge merke til dem fordi programvarepakker begynner å klage på at de har lite minne når du har mer enn nok fysisk RAM installert.



Hvis du er bekymret for en minnelekkasje, kan du prøve å skrive gratis flere ganger i en terminal. Hvis du plutselig begynner å se RAM-bruk raskt vokser, har du allerede oppdaget en minnelekkasje. Skulle du motta en feil som leser noe som bash: Ikke nok minne mens du gjør dette, og du ikke har annet enn en terminal eller til og med bare en virtuell konsoll åpen, så har du nesten utvilsomt å gjøre med en. Noen minnelekkasjer kan være litt subtilere, men Ubuntu, og det er forskjellige spin-offs, som inneholder verktøy og pakker som kan hjelpe deg med å oppdage disse.



Oppdage minnelekkasjer i Ubuntu

Siden verktøyene som brukes til å oppdage minnelekkasjer hovedsakelig er basert på CLI-ledeteksten, spiller det ingen rolle hvilken versjon av Ubuntu du kjører dem på. Disse skal fungere fint inne i en Unity-terminal i vanlig Ubuntu, fra en virtuell konsoll i Ubuntu Server, fra en lxterm i Lubuntu, en Konsole i Kubuntu eller til og med inne i Xfce i Xubuntu. Prøv å utføre en enkel oppgave som sudo -s og skriv inn passordet ditt for å begynne.



Dette skal gi deg et rotskall hvis det utføres riktig, men kan forårsake en minnefeil hvis du arbeider med en lekkasje som allerede har gått for langt. Hvis du virkelig har tilgang til et root shell, kan du prøve å skrive ekko 3> / proc / sys / m / drop_caches, trykke på enter-tasten og deretter skrive exit. Prøv å løpe gratis eller gratis -m igjen for å se om det har hjulpet å frigjøre minne.

Noen programmerere hevder at det ikke er noe poeng i å tvinge kjernen til å droppe cachene, siden de bør skylles og dermed gjenvinnes så snart det er behov for ekstra fysisk minne. Imidlertid vil kraftbølgene skade systemytelsen, men husk at dette bare er en test. Når du har startet systemet på nytt, bør Linux-kjernen igjen montere minnebufferne slik de var i utgangspunktet.

Noen få personer har foreslått å legge til linjesynkronisering; sudo echo 3> / proc / sys / vm / drop_caches til et skript som cron kjører konsekvent, men dette beseirer formålet med minnebuffing i utgangspunktet. Gratis minne i seg selv er bare ubrukt RAM, og det betyr at data må lastes inn mye langsommereelektromekanisk eller NAND-lagringsenheter. Uansett hvor raske disse enhetene er, er de ikke så raske som RAM er, noe som betyr at mens du skal fikse minnelekkasjer, bør du ikke tukle med hurtigbufferanlegget når du har satt det til den optimale innstillingen.



Hvis du har bestemt at du faktisk har en jevn minnelekkasje som skjer med jevne mellomrom mens du bruker maskinen din, og den ikke kan begrenses spesifikt, men du fortsatt har CLI-tilgang, så prøv å kjøre toppkommandoen. Dette skal gi deg en liste over prosesser som kjører.

Skulle Ubuntu gi deg en uvanlig feil om toppen, prøv å utstede opptattbox-toppen i stedet for å få tilgang til en enda enklere versjon av dette programmet. Når du har en liste, kan du se på% MEM eller lignende kolonne for å se hvilke applikasjoner som er tilordnet mest minne. Mens du kan merke PID og utstede en kill-kommando til det nøyaktige antallet PID, vil dette bare tvinge applikasjonen til å lukkes. Minnet de bruker, blir kanskje ikke frigjort etter at du har gjort dette, selv om det selvfølgelig er verdt et skudd.

Hvis du finner et program som bruker mye minne, skyver du q for å avslutte og prøver å drepe #### med PID-nummeret fra forrige skjermbilde. Systemprosesser skal ikke drepes på denne måten, og heller ikke noe du ikke har lagret, skal jobbe i. Tenk på dette på samme måte som å drepe noe med Ctrl + Alt + Del-oppgavelisten, som du også kan bruke til den samme prosessen.

Når du har funnet et program som dette konsekvent skjer med, kan du konfigurere det for å forhindre atferd i fremtiden. Hvert enkelt program vil selvfølgelig trenge en annen tilgang, som er utenfor oppgaven med å bare oppdage minnelekkasjer.

Skulle du ikke bare feilsøke applikasjoner, men også faktisk jobbe med kode, er det noen få andre ressurser du har. Ubuntu og dets derivater tilbyr deg rutinene for membarrier, memusage og memusagestat C for programmering.

Bare bruk man membarrier, man memusage eller man memusagestat for å se Linux Programmer's Manual-sidene på disse viktige rutinene. Hvis det er oppgraderinger i fremtidige versjoner av bibliotekene etter hvert som nye versjoner av Ubuntu kommer ut, vil endringene alltid bli beskrevet her.

Hvis du trenger grafisk innhold, tilbyr memusagestat til og med muligheten til å lagre en grafisk fremstilling av minnebruk i en PNG-fil. Dette gjør det også til en attraktiv funksjon for forfattere av verktøy, siden den kan brukes til å lage applikasjoner som regelmessig ser etter minnelekkasjer.

Det kan også være lurt å installere memprof, som er et verktøy for profilering av minnebruk for å hjelpe deg med å finne minnelekkasjer. Den genererer en profil angående hvor mye minne hver funksjon i et program du skriver tildeler. Det kan også skanne eksisterende minne for å finne blokker som er tildelt, men som ikke lenger inneholder ekte referanser. Dette gjøres ved å forhåndslaste et bibliotek for å overstyre standard C-bibliotekets minnetildelingsfunksjoner.

Hvis du planlegger å bruke dette, må du sørge for å fjerne inkludere memprof-linjen fra begynnelsen av koden før du slipper den. Dette brukes for å sikre at du ikke har noen lekkasjer, men det bør ikke bli en avhengighet hvis du pakker koden din og slipper den i et depot.

4 minutter lest