Kaip nustatyti atminties nuotėkį Ubuntu



Išbandykite Mūsų Instrumentą, Kaip Pašalinti Problemas

Yra keletas priežasčių, dėl kurių gali atsirasti atminties nuotėkis „Ubuntu“, tačiau, laimei, akivaizdu, kai jie atsiranda. „Buggy“ kodas dažnai yra didžiausia priežastis, nes programišiai galėjo neturėti galimybės patikrinti, ar išlaisvinama nebereikalinga atmintis. Jei diegėte nestabilius paketus arba kaupėte kodą iš šaltinio, dėl šios priežasties galbūt susiduriate su atminties nutekėjimais. Tikriausiai pradėsite juos pastebėti, nes programinės įrangos paketai pradeda skųstis, kad trūksta atminties, kai turite daugiau nei pakankamai fizinės RAM.



Jei nerimaujate dėl atminties nutekėjimo, pabandykite kelis kartus nemokamai įvesti terminalą. Jei staiga pastebėsite, kad RAM naudojimas greitai auga, tada jau aptikote atminties nutekėjimą. Jei gausite klaidą, kuri skamba panašiai kaip „bash“: atliekant tai nepakanka atminties ir jūs neturite nieko kito, kaip tik atidarytas terminalas ar net tiesiog virtuali konsolė, tuomet beveik neabejotinai susiduriate su ja. Kai kurie atminties nutekėjimai gali būti šiek tiek subtilesni, tačiau „Ubuntu“ ir įvairiuose „spin-off“ funkcijos įrankiuose ir paketuose, kurie gali padėti juos aptikti.



Aptikti atminties nutekėjimą Ubuntu

Kadangi atminties nutekėjimui aptikti naudojami įrankiai pirmiausia yra pagrįsti CLI eilute, nesvarbu, kurioje „Ubuntu“ versijoje juos paleisite. Tai turėtų gerai veikti „Unity“ terminalo viduje įprastame „Ubuntu“, iš virtualios konsolės „Ubuntu Server“, iš „lxterm“ „Lubuntu“, „Konsole“ „Kubuntu“ ar net „Xfce“ viduje „Xubuntu“. Pabandykite atlikti paprastą užduotį, pvz., Sudo -s, ir pradėdami įveskite slaptažodį.



Jei tai bus atlikta teisingai, tai turėtų gauti pagrindinį apvalkalą, tačiau gali sukelti atminties klaidą, jei dirbate su nutekėjimu, kuris jau yra per toli. Jei tikrai galite pasiekti šakninį apvalkalą, pabandykite įvesti echo 3> / proc / sys / m / drop_cache, paspauskite klavišą Enter ir įveskite exit. Pabandykite dar kartą paleisti nemokamai arba „free -m“, kad sužinotumėte, ar tai padėjo atlaisvinti atmintį.

Kai kurie programuotojai teigia, kad nėra prasmės versti branduolį išmesti talpyklas, nes jas reikia išplauti ir taip susigrąžinti, kai tik reikia papildomos fizinės atminties. Vis dėlto, nors šiomis talpyklomis išvalius jėgą, pakenks sistemos veikimas, turėkite omenyje, kad tai tik bandymas. Paleidus sistemą iš naujo, „Linux“ branduolys turėtų dar kartą surinkti atminties talpyklas taip, kaip jos buvo pirmoje vietoje.

Keletas žmonių pasiūlė pridėti linijos sinchronizavimą; sudo echo 3> / proc / sys / vm / drop_cache scenarijui, kurį „cron“ paleidžia nuosekliai, tačiau tai visų pirma panaikina atminties talpyklos tikslą. Pati laisva atmintis yra tik nenaudojama RAM, o tai reiškia, kad duomenis reikia įkelti daug lėčiauelektromechaninis arba NAND saugojimo įrenginiai. Kad ir kokie greiti šie įrenginiai būtų, jie nėra tokie greiti, kaip RAM, o tai reiškia, kad nors ir turėtumėte ištaisyti atminties nutekėjimą, iš tikrųjų neturėtumėte klastoti talpyklos sistemos, kai ją nustatote optimaliam nustatymui.



Jei nusprendėte, kad iš tikrųjų nuolat atsiranda atminties nutekėjimas, kuris periodiškai pasitaiko naudojant jūsų kompiuterį, ir jo negalima susiaurinti, tačiau vis tiek turite CLI prieigą, pabandykite paleisti viršutinę komandą. Tai turėtų suteikti jums vykdomų procesų sąrašą.

Jei „Ubuntu“ pateiks jums neįprastą klaidą apie „top“, pabandykite išleisti „busybox top“, kad galėtumėte pasiekti dar paprastesnę šios programos versiją. Gavę sąrašą, peržiūrėkite% MEM ar panašų stulpelį, kad sužinotumėte, kurioms programoms priskirta daugiausia atminties. Nors galėtumėte atkreipti dėmesį į PID ir pateikti tikslaus PID skaičiaus komandą „kill“, tai tiesiog privers programą uždaryti. Jų atlikta atmintis vis tiek gali būti neišleista, nors tai, žinoma, verta.

Jei radote programą, naudojančią daug atminties, paspauskite q, kad uždarytumėte, tada pabandykite užmušti #### su PID numeriu iš ankstesnio ekrano. Nereikėtų naikinti sistemos procesų, taip pat neturėtų veikti nieko, ko nesaugojote. Pagalvokite apie tai panašiai kaip užmušdami naudodami „Ctrl + Alt + Del“ užduočių sąrašą, kurį taip pat galite naudoti tam pačiam procesui.

Radę programą, su kuria tai nuolat vyksta, galite ją sukonfigūruoti taip, kad ateityje išvengtumėte tokio elgesio. Kiekvienai atskirai programai, be abejo, reikės skirtingo reikalavimo, o ne tik nustatyti atminties nutekėjimą.

Jei neturėtumėte atlikti tik programų trikčių šalinimo, bet ir dirbti su kodu, turite keletą kitų būdų. „Ubuntu“ ir jo dariniai siūlo jums programavimo rutinas, atmintines ir „memusagestat C“.

Paprasčiausiai naudokite „man membarrier“, „man memusage“ arba „man memusagestat“, kad galėtumėte peržiūrėti „Linux“ programuotojo vadovo puslapius šiose svarbiose kasdienybėse. Jei būsimose bibliotekų versijose bus atnaujinimų, kai pasirodys naujos „Ubuntu“ versijos, pakeitimai visada bus aprašyti čia.

Jei jums reikia grafinio turinio, „memusagestat“ netgi siūlo galimybę išsaugoti grafinį atminties naudojimo vaizdą PNG faile. Tai tampa patrauklia funkcija ir komunalinių paslaugų autoriams, nes ją galima naudoti programoms, kurios reguliariai tikrina, ar nėra atminties nuotėkių.

Taip pat galite įdiegti „memprof“, kuris yra atminties naudojimo profiliavimo įrankis, siekiant padėti rasti atminties nuotėkius. Tai sukuria profilį, kiek atminties skiria kiekviena jūsų rašomos programos funkcija. Jis taip pat gali nuskaityti esamą atmintį, kad surastų blokus, kurie buvo priskirti, tačiau nebėra originalių nuorodų. Tai daro iš anksto įkeldami biblioteką, kad nepaisytų standartinių C bibliotekos atminties paskirstymo funkcijų.

Jei planuojate tai naudoti, prieš atleisdami, įsitikinkite, kad pašalinote įtraukimo „memprof“ eilutę nuo savo kodo pradžios. Tai naudojama norint įsitikinti, ar nėra nuotėkio, tačiau tai neturėtų tapti priklausomybe, jei pakuosite kodą ir išleisite jį į saugyklą.

4 minutes perskaityta