Kā atklāt atmiņas noplūdi Ubuntu



Izmēģiniet Mūsu Instrumentu Problēmu Novēršanai

Ir vairāki iemesli, kāpēc Ubuntu var rasties atmiņas noplūde, bet, par laimi, tas ir acīmredzams, kad tie rodas. Buggy kods bieži ir lielākais iemesls, jo programmētājiem, iespējams, nav bijusi iespēja pārbaudīt, vai tiek atbrīvota vairs nevajadzīga atmiņa. Ja esat instalējis nestabilas paketes vai apkopojis kodu no avota, šī iemesla dēļ, iespējams, jūs nodarbojaties ar atmiņas noplūdēm. Jūs, iespējams, sāksiet tos pamanīt, jo programmatūras lietojumprogrammu pakotnes sāk sūdzēties par atmiņas trūkumu, kad ir instalēts vairāk nekā pietiekami daudz fiziskās RAM.



Ja jūs uztrauc atmiņas noplūde, mēģiniet atkārtoti ierakstīt terminālā bezmaksas. Ja pēkšņi sākat redzēt, ka operatīvā atmiņa strauji pieaug, tad jau esat atklājis atmiņas noplūdi. Ja saņemat kļūdu, kas skan kaut kas līdzīgs bash: to darot, nepietiek atmiņas, un jums nav nekas cits kā atvērts terminālis vai pat tikai virtuālā konsole, tad gandrīz neapšaubāmi jūs ar to nodarbojaties. Dažas atmiņas noplūdes var būt nedaudz izsmalcinātākas, taču Ubuntu un dažādu spin-off funkciju rīki un pakotnes var palīdzēt tās atklāt.



Atmiņas noplūdes noteikšana Ubuntu

Tā kā atmiņas noplūdes noteikšanai izmantotie rīki galvenokārt ir balstīti uz CLI uzvedni, nav svarīgi, kurā Ubuntu versijā jūs tos darbināt. Tām vajadzētu darboties lieliski Unity termināla iekšienē parastajā Ubuntu, no virtuālās konsoles Ubuntu serverī, no lxterm Lubuntu, Konsole Kubuntu vai pat Xfce iekšpusē Xubuntu. Mēģiniet veikt vienkāršu uzdevumu, piemēram, sudo -s, un, lai sāktu, ierakstiet paroli.



Ja tas tiek veikts pareizi, tam vajadzētu iegūt saknes apvalku, taču tas var izraisīt atmiņas kļūdu, ja strādājat ar noplūdi, kas jau ir aizgājusi pārāk tālu. Ja jūs patiešām varat piekļūt saknes apvalkam, mēģiniet ierakstīt echo 3> / proc / sys / m / drop_cache, nospiediet ievadīšanas taustiņu un pēc tam ierakstiet exit. Mēģiniet vēlreiz palaist brīvu vai free -m, lai uzzinātu, vai tas ir palīdzējis atbrīvot atmiņu.

Daži programmētāji apgalvo, ka nav jēgas piespiest kodolu atmest kešatmiņas, jo tās vajadzētu izskalot un tādējādi atjaunot, tiklīdz nepieciešama papildu fiziskā atmiņa. Tomēr, lai gan šo kešatmiņu skalošana ar spēku, tas kaitēs sistēmas veiktspējai, paturiet prātā, ka tas ir tikai pārbaudījums. Kad esat restartējis sistēmu, Linux kodolam vēlreiz jāsamontē atmiņas kešatmiņas tā, kā tās bija pirmajā vietā.

Daži cilvēki ir ieteikuši pievienot līnijas sinhronizāciju; sudo echo 3> / proc / sys / vm / drop_cache skriptam, kuru cron darbojas konsekventi, taču tas vispirms iznīcina atmiņas kešatmiņas mērķi. Brīvā atmiņa pati par sevi ir tikai neizmantota RAM, un tas nozīmē, ka dati jāielādē daudz lēnākelektromehāniskais vai NAND atmiņas ierīces. Neatkarīgi no tā, cik ātras ir šīs ierīces, tās nav tik ātras kā RAM, kas nozīmē, ka, lai gan jums vajadzētu novērst atmiņas noplūdes, jums faktiski nevajadzētu mainīt kešatmiņas sistēmu, kad esat iestatījis optimālo iestatījumu.



Ja esat nolēmis, ka jums patiešām ir konsekventa atmiņas noplūde, kas periodiski notiek, lietojot mašīnu, un to nevar īpaši samazināt, bet jums joprojām ir piekļuve CLI, mēģiniet palaist augšējo komandu. Tam vajadzētu dot jums palaisto procesu sarakstu.

Ja Ubuntu jums rodas neparasta kļūda par top, mēģiniet tā vietā izdot busybox top, lai piekļūtu vēl vienkāršākai šīs programmas versijai. Kad esat izveidojis sarakstu, apskatiet% MEM vai līdzīgu kolonnu, lai redzētu, kurām lietojumprogrammām ir piešķirta visvairāk atmiņas. Kaut arī jūs varētu atzīmēt PID un izdot komandu kill ar precīzu PID numuru, tas vienkārši piespiedīs programmu aizvērt. Viņu izmantotā atmiņa, iespējams, joprojām netiks atbrīvota, kad to izdarīsit, lai gan tā, protams, ir šāviena vērta.

Ja atrodat lietojumprogrammu, kurā tiek izmantots liels atmiņas apjoms, nospiediet q, lai aizvērtu, un pēc tam mēģiniet nogalināt #### ar PID numuru iepriekšējā ekrānā. Šādā veidā nevajadzētu nogalināt sistēmas procesus, kā arī nedarboties nekas, kas jums ir nesaglabāts. Padomājiet par to tāpat kā kaut ko nogalinot ar uzdevumu sarakstu Ctrl + Alt + Del, kuru varat izmantot arī šim pašam procesam.

Kad esat atradis programmu, ar kuru tas notiek konsekventi, varat to konfigurēt, lai novērstu turpmāku rīcību. Katrai atsevišķai programmai, protams, būs nepieciešams atšķirīgs risinājums, kas nav tikai uzdevums atklāt atmiņas noplūdes.

Ja jums nevajadzētu būt tikai lietojumprogrammu problēmu novēršanai, bet arī faktiski strādāt ar kodu, jums ir daži citi resursi. Ubuntu un tā atvasinājumi piedāvā jums programmēšanas kārtību, memusage un memusagestat C.

Vienkārši izmantojiet man membarrier, man memusage vai man memusagestat, lai apskatītu Linux programmētāja rokasgrāmatas lapas šajās svarīgajās kārtībās. Ja nākošajās bibliotēku versijās ir jauninājumi, kad iznāk jaunas Ubuntu versijas, izmaiņas vienmēr tiks aprakstītas šeit.

Ja jums nepieciešams grafisks saturs, tad memusagestat pat piedāvā iespēju saglabāt atmiņas izmantošanas grafisko attēlojumu PNG failā. Tas padara to par pievilcīgu funkciju arī utilītu autoriem, jo ​​to var izmantot, lai izveidotu lietojumprogrammas, kas regulāri pārbauda atmiņas noplūdes.

Varat arī instalēt memprof, kas ir atmiņas lietojuma profilēšanas rīks, lai palīdzētu jums atrast atmiņas noplūdes. Tas ģenerē profilu par to, cik daudz atmiņas piešķir katra jūsu rakstītās programmas funkcija. Tas var arī skenēt esošo atmiņu, lai atrastu blokus, kas ir piešķirti, bet vairs neparedz oriģinālas atsauces. Tas tiek darīts, iepriekš ielādējot bibliotēku, lai ignorētu standarta C bibliotēkas atmiņas piešķiršanas funkcijas.

Ja plānojat to izmantot, pirms koda atlaišanas pārliecinieties, ka koda sākumā esat noņēmis iekļautu memprof rindu. Tas tiek izmantots, lai pārliecinātos, ka jums nav noplūdes, taču tam nevajadzētu kļūt par atkarību, ja iesaiņojat kodu un atbrīvojat to krātuvē.

4 minūtes lasītas