Kako zaznati puščanje pomnilnika v Ubuntuju



Preizkusite Naš Instrument Za Odpravo Težav

Razlogov, zaradi katerih bi lahko prišlo do puščanja pomnilnika v Ubuntuju, je več, toda na srečo je očitno, kdaj se pojavijo. Koda napake je pogosto največji razlog, saj programerji morda niso imeli priložnosti preveriti, ali se sprosti pomnilnik, ki ni več potreben. Če ste nameščali nestabilne pakete ali prevajali kodo iz vira, se morda iz tega razloga spopadate z uhajanjem pomnilnika. Verjetno jih boste začeli opažati, ker se programski programski paketi začnejo pritoževati nad pomanjkanjem pomnilnika, ko imate nameščenega več kot dovolj fizičnega RAM-a.



Če vas skrbi puščanje pomnilnika, poskusite večkrat vtipkati brezplačno v terminal. Če nenadoma začnete videti, da RAM hitro raste, potem ste že zaznali uhajanje pomnilnika. Če se prikaže napaka, ki se glasi nekako kot bash: med tem ni dovolj pomnilnika in ni na voljo nič drugega kot terminal ali celo samo navidezna konzola, potem se z njo skoraj nedvomno ukvarjate. Nekatera uhajanja pomnilnika so lahko nekoliko bolj subtilna, toda Ubuntu in različna odcepljena orodja in paketi vam lahko pomagajo zaznati to.



Odkrivanje puščanja pomnilnika v Ubuntuju

Ker orodja, ki se uporabljajo za odkrivanje puščanja pomnilnika, temeljijo predvsem na pozivu CLI, ni pomembno, na kateri različici Ubuntuja jih izvajate. Ti bi morali dobro delovati znotraj terminala Unity v običajnem Ubuntuju, iz navidezne konzole v strežniku Ubuntu, iz lxterm v Lubuntu, Konsole v Kubuntu ali celo znotraj Xfce v Xubuntu. Poskusite izvesti preprosto nalogo, na primer sudo -s, in za začetek vnesite geslo.



Tako boste dobili korensko lupino, če jo pravilno izvedete, vendar lahko povzroči napako v pomnilniku, če delate z uhajanjem, ki je že šlo predaleč. Če resnično imate dostop do korenske lupine, poskusite vnesti echo 3> / proc / sys / m / drop_caches, pritisnite tipko enter in nato vnesite exit. Poskusite znova zagnati free ali free -m in preverite, ali je to pomagalo sprostiti pomnilnik.

Nekateri programerji trdijo, da kernelu ni smiselno prisiliti, da opusti predpomnilnike, saj jih je treba splakniti in tako predelati takoj, ko je potreben dodaten fizični pomnilnik. Kljub temu, da bo splakovanje teh predpomnilnikov škodovalo zmogljivosti sistema, ne pozabite, da je to zgolj preizkus. Ko sistem znova zaženete, bi moralo jedro Linuxa še enkrat sestaviti pomnilniške pomnilnike tako, kot so bili.

Nekaj ​​ljudi je predlagalo dodajanje sinhronizacije črt; sudo echo 3> / proc / sys / vm / drop_caches na skript, ki se cron neprekinjeno izvaja, vendar to v prvi vrsti premaga namen predpomnilnika pomnilnika. Prosti pomnilnik je zgolj neuporabljen RAM, kar pomeni, da je treba podatke nalagati precej počasnejeelektromehanski ali NAND naprave za shranjevanje. Ne glede na to, kako hitre so te naprave, niso tako hitre kot RAM, kar pomeni, da čeprav bi morali odpraviti puščanje pomnilnika, dejansko ne bi smeli posegati v sistem predpomnilnika, ko ga nastavite na optimalno nastavitev.



Če ste se odločili, da imate med uporabo računalnika redno puščanje pomnilnika in ga ni mogoče posebej zožiti, vendar imate še vedno dostop do CLI, poskusite zagnati zgornji ukaz. To bi vam moralo dati seznam tekočih procesov.

Če vam Ubuntu prikaže nenavadno napako glede vrha, poskusite namesto tega izdati busybox top, da boste lahko dostopali do še enostavnejše različice tega programa. Ko imate seznam, si oglejte stolpec% MEM ali podoben, da vidite, katerim aplikacijam je dodeljeno največ pomnilnika. Čeprav ste lahko zabeležili PID in izdali ukaz kill na natančno številko PID, bo to samo prisililo aplikacijo, da se zapre. Ko to storite, se spomin, ki ga uporabljajo, še vedno ne sprosti, čeprav je to seveda vredno poskusiti.

Če najdete aplikacijo, ki uporablja veliko količino pomnilnika, pritisnite q, da končate, in poskusite ubiti #### s številko PID s prejšnjega zaslona. Sistemskih procesov ne bi smeli ubijati na ta način, prav tako ne bi smelo delovati ničesar, pri čemer ste imeli neshranjene podatke. Pomislite na to podobno kot na ubijanje nečesa s seznamom opravil Ctrl + Alt + Del, ki ga lahko uporabite tudi za isti postopek.

Ko najdete program, ki se mu to dosledno dogaja, ga lahko konfigurirate tako, da prepreči vedenje v prihodnosti. Vsak posamezen program bo seveda potreboval drugačen zatek, ki pa je zgolj odkrivanje puščanja spomina.

Če ne uporabljate zgolj programov za odpravljanje težav, ampak tudi dejansko delate s kodo, obstaja nekaj drugih virov. Ubuntu in njegovi izpeljanki vam ponujajo membarrier, memusage in memusagestat C rutine za programiranje.

Preprosto uporabite man membarrier, man memusage ali man memusagestat, da si ogledate strani priročnika programerja Linux za te pomembne rutine. Če bodo v prihodnjih različicah knjižnic nadgrajene nove verzije Ubuntuja, bodo spremembe tukaj vedno opisane.

Če potrebujete grafično vsebino, potem memusagestat ponuja celo možnost shranjevanja grafičnega prikaza uporabe pomnilnika v datoteko PNG. Zaradi tega je privlačna lastnost tudi za avtorje pripomočkov, saj se lahko uporablja za izdelavo aplikacij, ki redno preverjajo, ali pušča pomnilnik.

Morda boste želeli namestiti tudi memprof, ki je orodje za profiliranje porabe pomnilnika, da vam pomaga pri iskanju puščanja pomnilnika. Ustvari profil glede na to, koliko pomnilnika dodeli posamezna funkcija v programu, ki ga pišete. Lahko tudi skenira obstoječi pomnilnik in poišče bloke, ki so bili dodeljeni, vendar ne vsebujejo več pristnih referenc. To naredi s predhodnim nalaganjem knjižnice, da preglasi funkcije dodelitve pomnilnika standardne knjižnice C.

Če nameravate to uporabiti, odstranite vključeno vrstico memprof z začetka kode, preden jo sprostite. S tem se prepričate, da ne puščate, vendar ne sme postati odvisnost, če kodo zapakirate in jo sprostite v repozitorij.

4 minute branja