Sådan registreres et hukommelseslækage i Ubuntu



Prøv Vores Instrument Til At Fjerne Problemer

Der er flere grunde til, at en hukommelseslækage kan forekomme på Ubuntu, men heldigvis er det tydeligt, når det sker. Buggy-kode er ofte den største årsag, da programmører måske ikke havde haft mulighed for at kontrollere for at sikre, at hukommelse, der ikke længere er nødvendig, frigives. Hvis du har installeret ustabile pakker eller kompileret kode fra kilden, har du muligvis at gøre med hukommelseslækage af denne grund. Du begynder sandsynligvis at lægge mærke til dem, fordi softwareprogrammer begynder at klage over, at de er løbet tør for hukommelse, når du har mere end nok fysisk RAM installeret.



Hvis du er bekymret for en hukommelseslækage, kan du prøve at skrive gratis gentagne gange i en terminal. Hvis du pludselig ser RAM-brug hurtigt vokse, har du allerede registreret en hukommelseslækage. Skulle du modtage en fejl, der læser noget som bash: Ikke nok hukommelse, mens du gør dette, og du kun har en terminal eller endda bare en virtuel konsol åben, så har du utvivlsomt at gøre med en. Nogle hukommelseslækager kan være lidt subtilere, men Ubuntu, og det er forskellige spin-offs, der indeholder værktøjer og pakker, der kan hjælpe dig med at opdage disse.



Registrering af hukommelseslækager i Ubuntu

Da de værktøjer, der bruges til at opdage hukommelseslækager, primært er baseret på CLI-prompten, betyder det ikke noget, hvilken version af Ubuntu du kører dem på. Disse skal fungere fint inde i en Unity-terminal i almindelig Ubuntu, fra en virtuel konsol i Ubuntu Server, fra en lxterm i Lubuntu, en Konsole i Kubuntu eller endda inde i Xfce i Xubuntu. Prøv at udføre en simpel opgave som sudo -s, og skriv din adgangskode for at begynde.



Dette skal give dig en rodskal, hvis den udføres korrekt, men kan forårsage en hukommelsesfejl, hvis du arbejder med en lækage, der allerede er gået for langt. Hvis du virkelig har adgang til en rodskal, så prøv at skrive ekko 3> / proc / sys / m / drop_caches, tryk på enter-tasten og skriv derefter exit. Prøv at løbe gratis eller gratis -m igen for at se, om det har hjulpet med at frigøre hukommelse.

Nogle programmører hævder, at der ikke er nogen mening i at tvinge kernen til at droppe dens cacher, da de skal skylles og dermed genvindes, så snart der er behov for yderligere fysisk hukommelse. Imidlertid vil mens cache skylles disse caches skade systemets ydeevne, husk at dette kun er en test. Når du har genstartet systemet, skal Linux-kernen igen samle hukommelsescacherne, som de var i første omgang.

Et par personer har foreslået at tilføje linjesynkronisering; sudo echo 3> / proc / sys / vm / drop_caches til et script, der cron kører konsekvent, men dette besejrer i første omgang formålet med hukommelsescaching. Gratis hukommelse i sig selv er kun ubrugt RAM, og det betyder, at data skal indlæses meget langsommereelektromekanisk eller NAND-lagerenheder. Uanset hvor hurtigt disse enheder er, er de ikke så hurtige som RAM er, hvilket betyder, at mens du skal rette hukommelseslækage, skal du ikke faktisk manipulere med cache-systemet, når du har indstillet det til den optimale indstilling.



Hvis du har besluttet, at du faktisk har en konstant hukommelseslækage, der sker periodisk, mens du bruger din maskine, og den ikke kan indsnævres specifikt, men du stadig har CLI-adgang, så prøv at køre den øverste kommando. Dette skal give dig en liste over kørende processer.

Skulle Ubuntu give dig en usædvanlig fejl omkring top, så prøv at udstede busybox top i stedet for at få adgang til en endnu enklere version af dette program. Når du har en liste, skal du se på% MEM eller lignende kolonnen for at se, hvilke applikationer der er tildelt mest hukommelse. Mens du kunne notere PID og udstede en kill-kommando til det nøjagtige antal PID, vil dette kun tvinge applikationen til at lukke. Hukommelsen, de bruger, frigives muligvis stadig ikke, når du har gjort dette, selvom det selvfølgelig er et skud værd.

Hvis du finder et program, der bruger en stor mængde hukommelse, skal du trykke på q for at afslutte og derefter prøve at dræbe #### med PID-nummeret fra det forrige skærmbillede. Systemprocesser bør ikke dræbes på denne måde, og heller ikke noget, som du ikke har gemt, skal arbejde i. Tænk på dette på samme måde som at dræbe noget med Ctrl + Alt + Del-opgavelisten, som du også kan bruge til den samme proces.

Når du har fundet et program, som dette konsekvent sker med, kan du konfigurere det for at forhindre adfærd i fremtiden. Hvert enkelt program vil naturligvis have brug for en anden tilgang, som ligger uden for opgaven med blot at opdage hukommelseslækager.

Skulle du ikke kun være fejlfinding af applikationer, men også rent faktisk arbejde med kode, er der et par andre ressourcer, du har. Ubuntu og dets derivater tilbyder dig membarrier, memusage og memusagestat C rutiner til programmering.

Brug simpelthen man membarrier, man memusage eller man memusagestat til at se siderne på Linux Programmer's Manual på disse vigtige rutiner. Hvis der er opgraderinger i fremtidige versioner af bibliotekerne, når nye versioner af Ubuntu kommer ud, vil ændringerne altid blive beskrevet her.

Hvis du har brug for grafisk indhold, tilbyder memusagestat endda muligheden for at gemme en grafisk gengivelse af hukommelsesbrug i en PNG-fil. Dette gør det også til en attraktiv funktion for forfattere af værktøjer, da den kan bruges til at fremstille applikationer, der regelmæssigt kontrollerer for hukommelseslækage.

Du kan også ønske at installere memprof, som er et værktøj til profilering af hukommelsesforbrug for at hjælpe dig med at finde hukommelseslækager. Det genererer en profil med hensyn til, hvor meget hukommelse hver funktion i et program, du skriver tildeler. Det kan også scanne eksisterende hukommelse for at finde blokke, der er tildelt, men ikke længere indeholder ægte referencer. Det gør det ved at forudindlæse et bibliotek for at tilsidesætte standard C-bibliotekets hukommelsesallokeringsfunktioner.

Hvis du planlægger at bruge dette, skal du sørge for at fjerne inkludere memprof-linjen fra begyndelsen af ​​din kode, før du frigiver den. Dette bruges til at sikre, at du ikke har lækager, men det bør ikke blive en afhængighed, hvis du pakker din kode og frigiver den i et lager.

4 minutter læst