Како открити цурење меморије у Убунту-у



Испробајте Наш Инструмент За Елиминисање Проблема

Постоји неколико разлога због којих би могло доћи до цурења меморије на Убунтуу, али на срећу, очигледно је када се они догоде. Бугги код је често највећи разлог, јер програмери можда нису имали прилику да провере да ли се ослобађа меморија која више није потребна. Ако инсталирате нестабилне пакете или компајлирате код из извора, можда се из овог разлога бавите цурењем меморије. Вероватно ћете почети да их примећујете јер софтверски пакети апликација почињу да се жале да им недостаје меморије када имате инсталирано више него довољно физичке РАМ меморије.



Ако сте забринути због цурења меморије, покушајте да више пута укуцате бесплатно у терминал. Ако изненада почнете да видите како РАМ брзо расте, онда сте већ открили цурење меморије. Ако примите грешку која гласи нешто попут басх: ​​Нема довољно меморије док то радите, а немате ништа осим терминала или чак само виртуелне конзоле, онда се готово несумњиво бавите њима. Нека цурења меморије могу бити мало суптилнија, али Убунту и различити издвојени алати и пакети могу вам помоћи да их откријете.



Откривање цурења меморије у Убунту-у

Будући да се алати који се користе за откривање цурења меморије првенствено заснивају на ЦЛИ упиту, није важно на којој верзији Убунту-а их покрећете. Они би требало да функционишу добро унутар Унити терминала у редовном Убунтуу, са виртуелне конзоле на Убунту серверу, из лктерм-а у Лубунту-у, Консоле-а у Кубунту-у или чак унутар Ксфце-а у Ксубунту-у. Покушајте да извршите једноставан задатак попут судо -с и унесите лозинку да бисте започели.



Ово би требало да вам донесе коренску љуску ако се правилно изведе, али може проузроковати грешку у меморији ако радите са цурењем које је већ предалеко. Ако заиста можете да приступите коренској љусци, покушајте да откуцате ецхо 3> / проц / сис / м / дроп_цацхес, притисните тастер ентер и затим откуцајте екит. Покушајте поново да покренете фрее или фрее -м да бисте видели да ли је то помогло ослобађању меморије.

Неки програмери тврде да нема сврхе присиљавати кернел да напушта кеш меморију, јер би их требало испрати и тако повратити чим је потребна додатна физичка меморија. Међутим, иако ће испирање ових кеша силом наштетити перформансама система, имајте на уму да је ово само тест. Када поново покренете систем, Линук кернел треба поново да састави меморијске предмеморије онако како су првобитно били.

Неколико људи је предложило додавање линијске синхронизације; судо ецхо 3> / проц / сис / вм / дроп_цацхес на скрипту коју црон ради доследно, али ово пре свега поништава сврху кеширања меморије. Слободна меморија је само неискоришћена РАМ меморија, а то значи да се подаци морају учитавати из много споријег временаелектромеханички или НАНД уређаји за складиштење. Без обзира на брзину ових уређаја, они нису тако брзи као РАМ, што значи да иако треба да поправите цурење меморије, заправо не бисте требали петљати у кеш систем након што га поставите на оптимално подешавање.



Ако сте закључили да заиста имате непрекидно цурење меморије које се периодично дешава током употребе вашег рачунара и не може се посебно сузити, али и даље имате ЦЛИ приступ, покушајте да покренете команду топ. Ово би требало да вам да списак извршених процеса.

Ако вам Убунту изда необичну грешку о врху, уместо тога покушајте да издате бусибок топ како бисте приступили још једноставнијој верзији овог програма. Када имате листу, погледајте колону% МЕМ или сличну да бисте видели којим апликацијама је додељено највише меморије. Иако сте могли забележити ПИД и издати наредбу за убијање на тачан број ПИД-а, то ће само присилити апликацију да се затвори. Меморија коју користе можда и даље неће бити ослобођена након што то учините, мада то вреди покушати.

Ако пронађете апликацију која користи велику количину меморије, притисните к да бисте затворили, а затим покушајте да убијете #### ПИД бројем са претходног екрана. Системски процеси не би требало да се убијају на овај начин, нити било шта у чему имате неспремљено. Размислите о овоме слично убијању нечега помоћу листе задатака Цтрл + Алт + Дел, коју такође можете користити за исти процес.

Када пронађете програм којем се то непрекидно догађа, можете га конфигурисати да спречи понашање у будућности. За сваки појединачни програм, наравно, биће потребан другачији прибегавање, што је изван задатка пуког откривања цурења меморије.

Ако не радите само програме за решавање проблема, већ и радите са кодом, постоји неколико других ресурса које имате. Убунту и његови деривати нуде вам мембарриер, мемусаге и мемусагестат Ц рутине за програмирање.

Једноставно користите ман мембарриер, ман мемусаге или ман мемусагестат да бисте погледали странице Приручника за Линук програмера на овим важним рутинама. Ако у будућим верзијама библиотека постоје надоградње како буду излазиле нове верзије Убунту-а, промене ће овде увек бити наведене.

Ако вам је потребан графички садржај, тада мемусагестат нуди чак и опцију да сачува графички приказ употребе меморије у ПНГ датотеци. То је чини привлачном особином и за ауторе услужних програма, јер се може користити за израду апликација које редовно проверавају цурење меморије.

Можда ћете желети да инсталирате мемпроф, који је алат за профилисање употребе меморије како би вам помогао у проналажењу цурења меморије. Генерише профил о томе колико меморије додељује свака функција у програму који пишете. Такође може скенирати постојећу меморију како би пронашао блокове који су додељени, али више не садрже оригиналне референце. То чини унапред учитавањем библиотеке да би надјачао карактеристике алокације меморије стандардне Ц библиотеке.

Ако планирате да користите ово, обавезно уклоните линију инцлуде мемпроф са почетка кода пре него што га пустите. Ово се користи да би се осигурало да нема цурења, али не би требало да постане зависност ако свој пакет спакујете и пустите у спремиште.

4 минута читања