Ako zistiť únik pamäte v Ubuntu



Vyskúšajte Náš Nástroj Na Odstránenie Problémov

Existuje niekoľko dôvodov, prečo môže v systéme Ubuntu dôjsť k úniku pamäte, ale našťastie je zrejmé, kedy k nemu dôjde. Buggy kód je často hlavným dôvodom, pretože programátori možno nemali možnosť skontrolovať, či sa uvoľní pamäť, ktorá už nie je potrebná. Ak inštalujete nestabilné balíčky alebo kompilujete kód zo zdroja, pravdepodobne máte z tohto dôvodu problém s únikmi pamäte. Pravdepodobne si ich začnete všimnúť, pretože balíčky softvérových aplikácií sa začnú sťažovať na nedostatok pamäte, keď máte nainštalovaný dostatok pamäte RAM.



Ak máte obavy z úniku pamäte, skúste do terminálu opakovane zadávať voľnosť. Ak náhle začnete vidieť, ako sa RAM rýchlo zvyšuje, potom ste už zistili únik pamäte. Ak sa vám zobrazí chyba, ktorá hovorí niečo ako bash: Nedostatok pamäte, pritom nemáte otvorený terminál alebo iba virtuálnu konzolu, máte s ňou takmer nepochybne problém. Niektoré úniky pamäte môžu byť trochu jemnejšie, ale Ubuntu a rôzne vedľajšie produkty a nástroje, ktoré vám ich pomôžu odhaliť, sú rôzne.



Zisťovanie úniku pamäte v Ubuntu

Pretože nástroje používané na zisťovanie únikov pamäte sú primárne založené na výzve CLI, nezáleží na tom, na ktorej verzii Ubuntu ich spustíte. Mali by fungovať dobre vo vnútri terminálu Unity v bežnom Ubuntu, z virtuálnej konzoly v Ubuntu Server, z lxterm v Lubuntu, Konsole v Kubuntu alebo dokonca z Xfce v Xubuntu. Skúste vykonať jednoduchú úlohu ako sudo -s a začnite zadaním hesla.



Toto by vám malo poskytnúť koreňový shell, ak je vykonané správne, ale môže spôsobiť chybu pamäte, ak pracujete s únikom, ktorý už zašiel príliš ďaleko. Ak skutočne máte prístup k koreňovému shellu, skúste zadať príkaz echo 3> / proc / sys / m / drop_caches, stlačte kláves Enter a zadajte príkaz exit. Skúste znova bežať free alebo free -m a zistite, či to pomohlo uvoľniť pamäť.

Niektorí programátori tvrdia, že nemá zmysel nútiť jadro, aby vypadlo z vyrovnávacích pamätí, pretože by sa mali vypláchnuť, a teda znovu získať, akonáhle je potrebná ďalšia fyzická pamäť. Avšak zatiaľ čo silové preplachovanie týchto vyrovnávacích pamätí poškodí výkon systému, nezabudnite, že ide iba o test. Po reštarte systému by malo jadro Linuxu znova zostaviť pamäte cache tak, ako boli na prvom mieste.

Niekoľko ľudí navrhlo pridať synchronizáciu riadkov; sudo echo 3> / proc / sys / vm / drop_caches do skriptu, ktorý cron beží dôsledne, ale to na prvom mieste ruší účel ukladania do pamäte. Samotná voľná pamäť je iba nevyužitá pamäť RAM, čo znamená, že dáta sa musia načítať oveľa pomalšieelektromechanické alebo úložné zariadenia NAND. Bez ohľadu na to, aké rýchle sú tieto zariadenia, nie sú také rýchle ako RAM, čo znamená, že aj keď by ste mali opraviť úniky pamäte, nemali by ste skutočne zasahovať do systému vyrovnávacej pamäte, keď ho nastavíte na optimálne nastavenie.



Ak ste sa rozhodli, že skutočne dochádza k neustálemu úniku pamäte, ktorý sa pravidelne stáva pri používaní vášho stroja a nemožno ho konkrétne zúžiť, stále však máte prístup k rozhraniu CLI, skúste spustiť horný príkaz. Takto by ste mali získať zoznam spustených procesov.

Ak by vám Ubuntu zobrazilo neobvyklú chybu, skúste namiesto toho vydať busybox top, aby ste získali prístup k ešte jednoduchšej verzii tohto programu. Keď máte zoznam, pozrite sa na stĺpec% MEM alebo podobný stĺpec, aby ste zistili, ktorým aplikáciám je priradených najviac pamäte. Aj keď si môžete všimnúť PID a vydať príkaz kill na presné číslo PID, iba to vynúti ukončenie aplikácie. Pamäť, ktorú používajú, sa nemusí po tom všetkom uvoľniť, aj keď to samozrejme stojí za to.

Ak nájdete aplikáciu, ktorá využíva veľké množstvo pamäte, ukončite ju stlačením q a potom skúste zabiť #### pomocou PID čísla z predchádzajúcej obrazovky. Systémové procesy by sa nemali zabiť týmto spôsobom, rovnako by nemalo fungovať ani nič, čo nemáte uložené. Myslite na to podobne, ako keby ste niečo zabili pomocou zoznamu úloh Ctrl + Alt + Del, ktorý môžete tiež použiť na rovnaký proces.

Keď nájdete program, s ktorým sa neustále dôsledne deje, môžete ho nakonfigurovať, aby ste zabránili správaniu v budúcnosti. Každý jednotlivý program bude samozrejme potrebovať inú možnosť, ktorá presahuje úlohu iba zisťovať úniky pamäte.

Ak by ste nemali iba odstraňovať problémy s aplikáciami, ale skutočne aj pracovať s kódom, existuje niekoľko ďalších riešení. Ubuntu a jeho deriváty vám ponúkajú programovacie procedúry membarrier, memusage a memusagestat C.

Jednoducho použite man membarrier, man memusage alebo man memusagestat na prezeranie stránok manuálu k programátoru Linux pre tieto dôležité rutiny. Ak budú v budúcich verziách knižníc aktualizácie, keď vyjdú nové verzie Ubuntu, zmeny tu budú vždy uvedené.

Ak potrebujete grafický obsah, memusagestat dokonca ponúka možnosť uložiť grafické znázornenie využitia pamäte do súboru PNG. Vďaka tomu je atraktívnou vlastnosťou aj pre autorov obslužných programov, pretože sa dá použiť na výrobu aplikácií, ktoré pravidelne kontrolujú úniky pamäte.

Môžete tiež nainštalovať memprof, ktorý je nástrojom na profilovanie využitia pamäte, aby vám pomohol nájsť úniky pamäte. Generuje profil týkajúce sa toho, koľko pamäte pridelí každá funkcia v programe, ktorý píšete. Môže tiež skenovať existujúcu pamäť a nájsť bloky, ktoré boli pridelené, ale už neobsahujú skutočné odkazy. Robí to predbežným načítaním knižnice, aby sa prepísali funkcie alokácie pamäte štandardnej knižnice C.

Ak to plánujete použiť, pred uvoľnením kódu nezabudnite zo začiatku kódu odstrániť riadok zahrnutia memprof. Používa sa na to, aby ste sa ubezpečili, že nemáte žiadne úniky, ale nemalo by sa to stať závislosťou, ak zabalíte kód a vydáte ho v úložisku.

4 minúty prečítané