LINUX.ORG.RU

«Утечки» памяти в Firefox: официальный отчёт


0

0

Оказывается некоторые разработчики Mozilla Firefox до сих пор не знали(!) о печально известной ошибке, связанной с невозвращением выделенной оперативной памяти. Эта ошибка связана с тем, что выделяемая в процессе работы браузера память, запрашивается у ОС маленькими рядом идущими фрагментами, высвобождение отдельных из которых потом практически невозможно.

Stuart Parmenter предлагает несколько способов решения проблемы: выделение маленьких строк на стэке, а не в куче, выделение больших кусков памяти за один раз с дальнейшим распределением выделенного пространства под мелкие строки (как это уже сделано для layout objects) и т.д. В качестве последнего шага предлагается написать свою реализацию malloc/new, но Parmenter не считает что этим стоит заниматься, пока не опробованы другие способы.

"В качестве самой последней меры, мы могли бы полностью заменить malloc и new чем-то более лучшим. Я не думаю, что это стоит сейчас делать, пока мы не попробовали как можно больше других способов".

>>> Подробности

Re: "Утечки" памяти в Firefox: официальный отчёт

> Вообще-то, уже.

Я сказал _средний_ для всех компьютеров. У меня в компании куча народа сидит на 512MB, новые компьютеры заказываются с 1GB, на 2GB перейдём совсем не скоро.

По моим оценкам, сейчас средний объём RAM равен примерно 768MB-1GB.

birdie ★★★★★ ()

Re: "Утечки" памяти в Firefox: официальный отчёт

>Ждём когда девелоперы Фокса вслед за вайновцами откроют для себя Valgrind.

если они запустят лиса под valgrind'ом, то умрут от старости ещё до окончания рендеринга home page.

mirage ()

Re: "Утечки" памяти в Firefox: официальный отчёт

>браузер mozilla — это переписанный _с нуля_ netscape. думаете, что со второго раза у них лучше выйдет?

фигня фиолетовая. то, что они постепенно заменяли куски, и в конце-концов все их заменили — допускаю. но если это называется «переписать с нуля», то я — внебрачный сын Торвальдса.

а вот выкинуть теперешний код и сделать заново да нормально — это было бы хорошо в плане скорости и стабильности. и абсолютно провально в плане коммерции (и не надо говорить, что MF — некоммерческая; мы тут большие мальчики, понимаем эти телодвижения под дымовой завесой).

то есть: не будет никто ничего переписывать, пока оно окончательно не откажется работать на PC и не начнёт требовать для запуска кластера из суперкомпов.

mirage ()

Re: "Утечки" памяти в Firefox: официальный отчёт

Надо всё переписать на D!

/me по-быстрому убежал.

Legioner ★★★★★ ()

Re: "Утечки" памяти в Firefox: официальный отчёт

Очень жаль что они совершенно не хотят заниматься более насущьными проблемами своего продукта...

Apocalepse ()

Re: "Утечки" памяти в Firefox: официальный отчёт

>> Поправьте, malloc и new - это не системные вызовы. Malloc - функция библиотеки C, а new - это оператор в C++.

>как ты думаешь, на чем реализован оператор new()?

Его можно переопределить. Там можно поставить условие - если чанк памяти меньше определенного размера, то использовать спецпул. Если больше - то пользоваться malloc(). Размер чанка выделенного под указатель в соответствии со стандартом С++ можно получить и в operator delete(), и задействовать симметричный способ удаления. У А. Александреску в библиотеке Loki есть класс Loki::SmallObject, который всю эту логику реализует.

Absurd ★★★ ()

Re: "Утечки" памяти в Firefox: официальный отчёт

> Оказывается некоторые разработчики Mozilla Firefox до сих пор не знали(!)

4.2

anonymous ()

Re: "Утечки" памяти в Firefox: официальный отчёт

> Чего тут думать? JVM спасёт атцов русскай демократии! :))

В java слишком тормозная сборка мусора, да и переписывать придется код. Не лучше ли просто отказаться от free/delete? Память-то нынче такие гроши стоит, что подумать страшно.

anonymous ()

Re: "Утечки" памяти в Firefox: официальный отчёт

+ речь в статье идёт о FF 3 =>

s/"Утечки" памяти в Firefox: официальный отчёт/"Утечки" памяти в Firefox 3: официальный отчёт/

s/Оказывается некоторые разработчики Mozilla Firefox до сих пор не знали(!)/Разработчики Mozilla Firefox 3 не смогли обнаружить в коде места серьёзных утечек памяти/

anonymous ()

Re: "Утечки" памяти в Firefox: официальный отчёт

> откуда дровишки? афаик переписан там только интерфейс, а движок нетшкафовский

ну а нетшкаф переписывался "from scratch" при переходе от версии 4.0 к 6.0. 5.0 не было, а сам переход занял 3 года

gaa ★★ ()

Re: "Утечки" памяти в Firefox: официальный отчёт

>откуда дровишки? афаик переписан там только интерфейс, а движок нетшкафовский

Пытался думать мозгом ? (верхним) Вспомни на чем остановилось развитие NN, и то что сейчас умеет FF. Общие куски кода наверняка есть, но полагаю их мало, и тормозят скорее всего не они. NN был вполне быстрым браузером для своего времени.

anonizmus ()

Re: "Утечки" памяти в Firefox: официальный отчёт

> зачем нужен ff когда есть opera и konqueror, лишенные этих недостатков?

оперу портировали на amd64? в опере и конквероре появился аналог firebug? в конквероре появились imglikeopera?

gaa ★★ ()

Re: "Утечки" памяти в Firefox: официальный отчёт

64-bit builds у Оперы давно уже есть. это боянЪ.

wtf is firebug? js-debugger? увы. тут у Оперы всё плохо. что, впрочем, лично мне никак не мешает делать скрипты по 100 кил и прекрасно их отлаживать. под Оперой.

mirage ()

Re: "Утечки" памяти в Firefox: официальный отчёт

> 64-bit builds у Оперы давно уже есть. это боянЪ.

спасибо, не знал

> wtf is firebug? js-debugger? увы. тут у Оперы всё плохо. что, впрочем, лично мне никак не мешает делать скрипты по 100 кил и прекрасно их отлаживать. под Оперой.

да. плюс ещё инспектор(и редактор) DOM-дерева, отладчик ajax-запросов... в общем, удобная вещь для отладки приложений, завязанных на ajax-е.

gaa ★★ ()

Re: "Утечки" памяти в Firefox: официальный отчёт

Утечки? Какие утечки? Быдлу просто объяснят что ему нужно купить больше памяти.

anonymous ()

Re: "Утечки" памяти в Firefox: официальный отчёт

>> Утечки? Какие утечки? Быдлу просто объяснят что ему нужно купить больше памяти.

> А небыдлу браузер не нужен.

небыдло ходит на ЛОР netcat-ом и рендерит странички в уме?

gaa ★★ ()

Re: "Утечки" памяти в Firefox: официальный отчёт

>>> Утечки? Какие утечки? Быдлу просто объяснят что ему нужно купить больше памяти.

>> А небыдлу браузер не нужен.

>небыдло ходит на ЛОР netcat-ом и рендерит странички в уме?

ЛОР нормально и в lynx выглядит. Как и большинство Linux/BSD/UNIX ресурсов. Хотя я все-таки нетру, то есть быдло.

Absurd ★★★ ()

Re: "Утечки" памяти в Firefox: официальный отчёт

>спасибо, не знал

ну, и я погорячился. не «давно», а «с момента выхода альфы Kestrel'а». %-)

>да. плюс ещё инспектор(и редактор) DOM-дерева, отладчик ajax-запросов… в общем, удобная вещь для отладки приложений, завязанных на ajax-е.

по-моему, всё это есть в Opera Developer Tools. мне хватает:

devTools (скрипт)

Mouseover DOM Inspector (после напильника) (скрипт)

JavaScript Console (вмонтировано в Оперу)

JK JavaScript Console (Jupiter JS Console, скрипт, после напильника)

чего нет — это пошагового выполнения JS. но я и gdb как-то не использую, всё по старинке: логами да принтами… %-)

mirage ()

Re: "Утечки" памяти в Firefox: официальный отчёт

>оперу портировали на amd64?

портировали

>в конквероре появились imglikeopera?

Че это такое? Кнопка "загрузить картинки" чтоль? Всегда было.

> в опере и конквероре появился аналог firebug?

не все тут вебдевелоперы

Reset ★★★★★ ()

Re: "Утечки" памяти в Firefox: официальный отчёт

>> да. плюс ещё инспектор(и редактор) DOM-дерева, отладчик ajax-запросов… в общем, удобная вещь для отладки приложений, завязанных на ajax-е.

> по-моему, всё это есть в Opera Developer Tools.

то есть там можно навести мышу на какой-либо элемент и получить сразу соответствующую ноду из dom-дерева?

моэно видеть, какие именно в данный момент идут запросы и видеть их параметры?

можно редактировать "на лету" содержимое страницы?

PS. я не придираюсь, я действительно не знаю, есть ли это в опере

gaa ★★ ()

Re: "Утечки" памяти в Firefox: официальный отчёт

>>в конквероре появились imglikeopera?

> Че это такое? Кнопка "загрузить картинки" чтоль? Всегда было.

возможность переключения между грузить/не грузить/грузить только из кеша. удобно при нежелании тянуть лишнюю графику.

>> в опере и конквероре появился аналог firebug?

> не все тут вебдевелоперы

я для себя спрашиваю, из-за этих фич пришлось на огнелиса уходить.

gaa ★★ ()

Re:

>то есть там можно навести мышу на какой-либо элемент и получить сразу соответствующую ноду из dom-дерева?

да. точнее, так: наводим крыс, делаем «клац» — devTool вежливо открывает дерево у себя в окошке и позиционируется на нужный элемент. для того, чтобы не тащить комбайн (я часто делаю простые «чистилки» страниц в 5–8 XPath-запросов) есть MODI — скрипт на 30 кил, без дерева, но иногда удобен.

>моэно видеть, какие именно в данный момент идут запросы и видеть их параметры?

вот тут не уверен. что-то такое есть — XHR logger с кучей опций — но я его не юзал (не надо пока). вроде, однажды пробовал — работает, лог делает.

>можно редактировать «на лету» содержимое страницы?

не совсем. можно чуть-чуть «корябать» DOM. плюс — в MODI есть «edit html of this node». то есть, в принципе, можно.

>PS. я не придираюсь, я действительно не знаю, есть ли это в опере

да я по тону понял. вот, отвечаю в меру сил. %-)

я, конечно, не веб-девелопер, так, любитель. мне инструментов хватает. возможно, для серьёзного чего и не хватит. хотя, повторюсь, весьма нетривиальный скрипт объёмом около 100 кил с динамической подгрузкой/выгрузкой js-плугинов я вполне успешно за недельку по вечерам написал. работает, каши не просит. скрипт занимается модификацией страниц, добавлением перделок и прочим для ресурса в городской локалке.

mirage ()

Re: "Утечки" памяти в Firefox: официальный отчёт

>сам мозг включи. с чего бы это последний нетшкаф совместим с фоксом вплоть до расширений если разные движки?

насколько я помню, мозилловцы полностью переписали движек со времен нетшкафа 4, а нетшкаф 6 уже основан на этом полностью переписаном движке.

wieker ★★ ()

Re: "Утечки" памяти в Firefox: официальный отчёт

ща вот как перелезу на нетскейп ! будете знать

anonymous ()
Ответ на: Re: от gaa

Re:

not at all. это не firebug, конечно, но инструмент вполне достойный, имо.

единственно что стоит — это стянуть скрипт на локалхост. анноит, что оно каждый раз на сайт оперы за ним лезет.

зыж если кто ещё заинтересовался — http://dev.opera.com/articles/view/opera-developer-tools/

страница датирована концом 2006, но сам скрипт активно развивают (потому и ставят по дефолту «брать с сайта оперы»).

mirage ()

Re: "Утечки" памяти в Firefox: официальный отчёт

>насколько я помню, мозилловцы полностью переписали движек со времен нетшкафа 4, а нетшкаф 6 уже основан на этом полностью переписаном движке.

да. пятого никогда не было (туда планировали вставить Marine), а шестой — уже на змеюке.

mirage ()

Re: "Утечки" памяти в Firefox: официальный отчёт

Кто-нибудь может объяснить что плохого в том чтобы написать свой "умный" malloc()? ведь это должно быть значительно проще чем изменять весь код

anonymous ()

Re: "Утечки" памяти в Firefox: официальный отчёт

>Кто-нибудь может объяснить что плохого в том чтобы написать свой "умный" malloc()? ведь это должно быть значительно проще чем изменять весь код

it's not sexy

wieker ★★ ()

Re: "Утечки" памяти в Firefox: официальный отчёт

>Кто-нибудь может объяснить что плохого в том чтобы написать свой "умный" malloc()? ведь это должно быть значительно проще чем изменять весь код

Чтобы улучшить перформанс/использование памяти надо всегда быть более специфичным, и подходить индивидуально к каждому случаю. Типа "А на что пойдет память в данном контексте, и когда ее можно будет удалить?". Применительно к Мозилле надо наверно иметь по пулу памяти на каждую страницу и при закрытии освобождать сразу большой непрерывный кусок. Это как минимум, в реале гранулярность должна быть еще выше. Возможно, ее надо дефрагментировать - тогда надо использовать вместо указателей хендлы и когда кусок памяти не используется (счетчик локингов == 0) его можно двигать вплонтую к другому занятому блоку, выдавливая "воздух" в большой непрерывный блок - это можно сделать в каком-нибудь хандлере onIdle. Но в таком большой проекте как Мозилла это было бы безумие, к тому же приоритеты задаются менеджерами.

Absurd ★★★ ()

Re: "Утечки" памяти в Firefox: официальный отчёт

Тут пару раз поднимался вопрос о переписывании кода с нуля.

Давайте разберемся. Что тормозит и жрет память?

Gecko? Есть WebKit (который с точки зрения кода выглядит значительно лучше). Тут интересен Midori - морда для вебкита, которая пишется с нуля (и причем вменяемым человеком) и уже сейчас вполне похожа на браузер (скриптуемость на Lua из коробки).

XUL? Не пользуйтесь Firefox, есть много других браузеров на Gecko - понимающий многие расширения последнего Epiphany, а также новомодный Kazehakaze.

anonymous ()
Ответ на: Re: от KRoN73

Re:

> Можно своп совсем выключать...

У меня 1G, свапа нет. Забыл при установке сделать. :) Никаких проблемы не наблюдал.

atrus ★★★★★ ()
Ответ на: Re: от atrus

Re:

>> Можно своп совсем выключать...

> У меня 1G, свапа нет. Забыл при установке сделать. :) Никаких проблемы не наблюдал.

на 512 мб наблюдал только проблему с тем, что sh -c ':(){:&:};:' валил систему много раньше чем с одним гигом

gaa ★★ ()
Ответ на: Re: от gaa

Re:

> на 512 мб наблюдал только проблему с тем, что sh -c ':(){:&:};:' валил систему много раньше чем с одним гигом

Это надежда на то, что запущу? ;-) За кого меня принимают... Неужели кто-то с четырьмя звездами до сих пор не выучил bash? ;-)))

atrus ★★★★★ ()

Re: "Утечки" памяти в Firefox: официальный отчёт

[birdie@localhost ~]$ sh -c ':(){:&:};:'
sh: -c: line 0: syntax error near unexpected token `{:'
sh: -c: line 0: `:(){:&:};:'

birdie ★★★★★ ()

Re: "Утечки" памяти в Firefox: официальный отчёт

> [birdie@localhost ~]$ sh -c ':(){:&:};:'
> sh: -c: line 0: syntax error near unexpected token `{:'
> sh: -c: line 0: `:(){:&:};:'

знакомый гентушнег запускал, потом прислал мне смс, что я злодей. наверно для этой форкбомбы особые USE-флаги нужны...

gaa ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.