LINUX.ORG.RU

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


0

0

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

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

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

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

>пока мы не завершили как можно больше других дел

для них важнее заниматься созданием красивых переключений табов?

anonymous
()

Наверное, скоро они закроют исходники... Ведь для вендоламов это не имеет значения. Короче, они сошли с ума.

И ещё раз спасибо Netscape.

GFORGX ★★★
()

Не верю я, что moz-девелоперы не знали и не знают об этом. :) Лень им просто перелапачивать код, когда народ итак хавает.

Gular
()

ИМХО топик сформулирован провокационно.

По ссылке (да, я нарушил эту традицию ЛОРа) говорят об источниках фрагментации и обещают кое-чего поправить для её уменьшения.

Alan_Steel ★★
()

Они просто свои поделки не используют.

anonymous
()

Перевод предложения по ссылке не учитывает контекст! Замените последнее предложение новости:

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

anonymous
()

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

Освобождение их очень даже возможно, а уж будут ли они использованы при следующих вызовах malloc зависит от реализации malloc, и от того, какой размер этим аллоком требуют.

anonymous
()

Konq наше все.

sv75 ★★★★★
()

Ясен перец - багзилла для лохов. Может они и про баг с раскладками не знают?

Midael ★★★★★
()

> заменить [системные вызовы] malloc

Это не системный вызов, а обёртка из libc для старых добрых brk/sbrk из Unix (по крайней мере это так для Linux)

anonymous
()

Поправил. Действительно в английском тексте говорится о различных попытках решить проблему, а не что она будет отложена ради других фич.

anonymous_incognito ★★★★★
()
Ответ на: комментарий от krum

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

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

anonymous
()
Ответ на: комментарий от anonymous_incognito

Согласен, читал не внимательно.

birdie ★★★★★
() автор топика

Как-то текст всё же криво написан. Спать надо больше ... и читать художественную литературу ... на русском ;-)

birdie ★★★★★
() автор топика
Ответ на: комментарий от birdie

Расскажи уж заодно, где ты в по ссылке нашёл что "некоторые разработчики Mozilla Firefox до сих пор не знали(!) о печально известной ошибке"

У меня получилось найти только "I've been doing a lot of work trying to figure out why after loading a lot of pages much of your memory seems to disappear", что примерно переводится как "Я провёл большую работу, пытаясь выяснить почему после просмотра множество страниц довольно большое количество памяти исчезает", и дальше он перечисляет что именно он проверял.

Alan_Steel ★★
()
Ответ на: комментарий от kto_tama

А что, сложно написать свою ф-ю выделения памяти? Это в курсовых работах на 2м курсе студенты делают.

Arceny ★★
()

вообще, вызывать многократно malloc ради нескольких байт - тупость. эффективнее выделить бОльший буфер и затем делать realloc

anonymous
()
Ответ на: комментарий от Alan_Steel

Он не знал про то, что ошибка связана с выделением маленьких объёмов памяти. Он смотрел на "обычные" утечки памяти, связанные с её невозвращением через free.

birdie ★★★★★
() автор топика
Ответ на: комментарий от anonymous

> вообще, вызывать многократно malloc ради нескольких байт - тупость.

В Mozilla память выделяется в стольких разных местах и такими неожиданными способами, что привести всё к общему знаменателю очень сложно. В общем Mozilla просит своего аллокатора, может к версии 3.5/4.0 мы его получим.

birdie ★★★★★
() автор топика

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

Да-да-да. Сишники разучились управлять памятью врукоашную. И не знают, как быть.

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

iZEN ★★★★★
()
Ответ на: комментарий от birdie

>В Mozilla память выделяется в стольких разных местах и такими неожиданными способами, что привести всё к общему знаменателю очень сложно.

Общий знаменатель это Garbage Collector. Ж)

iZEN ★★★★★
()

Не проще ли переписать код на java? Если у них так много времени уходит на отладку не правильнеее ли взвалить эту проблему на java машину?

anonymous
()

Бля, а когда они перейдут на АВТОМАТИЧЕСКУЮ сборку мусора?

new, malloc - ЗЛО 80-х годов 20-го века, а на дворе уже давно 21 век!

anonymous
()
Ответ на: комментарий от anonymous

> Stuart Parmenter предлагает несколько способов решения проблемы:

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

anonymous
()
Ответ на: комментарий от anonymous

У них до сих пор на десктопах текстовый режим и еще хорошо, если фреймбуфер включен.И вообще не понимаю зачем им багзила когда lynx наше фсе

anonymous
()
Ответ на: комментарий от anonymous

Писец, а у вантузоидов до сих пор нет мозгов?

anonymous
()

Заменять malloc и new - это бред. Уже в своем коде сами разобраться не могут. Не лучше ли _грамотно_ переписать все с нуля? Имхо если дальше весь этот бардак будет продолжаться, то девелоперы будут путаться в своей же работе еще больше. И в итоге приличный проект захлебнется в своих же отходах.

Demon37 ★★★★
()
Ответ на: комментарий от Demon37

Через год полтора средний объём RAM на компьютере будет 1,5 - 2GB, а значит на эту проблему просто забьют.

birdie ★★★★★
() автор топика
Ответ на: комментарий от Demon37

> Не лучше ли _грамотно_ переписать все с нуля?

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

gaa ★★
()
Ответ на: комментарий от Demon37

Ога-Ога. переписать с нуля. там же туева хуча кода, причём куча _отлаженного_ кода. Сколько они это пилят... если ещё начать переписывать на это угрохается куууча времени. Они тогда тупо потреят рынок....

theos ★★★
()
Ответ на: комментарий от birdie

> Через год полтора средний объём RAM на компьютере будет 1,5 - 2GB, а значит на эту проблему просто забьют.

А ты о мобильных устройствах не думал? а они вот наконец-то начали думать....

romaxa
()
Ответ на: комментарий от birdie

>Через год полтора средний объём RAM на компьютере будет 1,5 - 2GB

Вообще-то, уже. 512Мб - это сегодня даже в России самый лоуэнд. Я со своим 1Гб на домашние машине - и то уже "нищий" :) Надо бы добавить. Linux на 2Гб живёт намного приятнее, чем на 1Гб. Можно своп совсем выключать...

Вот, на работе (машинка среднего класса):

Mem: 2049372k total, 1840960k used, 208412k free, 539148k buffers Swap: 0k total, 0k used, 0k free, 731072k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 28019 root 15 0 403m 86m 8212 S 0 4.3 46:42.63 X 28101 balancer 15 0 96152 78m 24m S 0 3.9 1:42.48 konqueror 8471 mysql 15 0 145m 35m 5120 S 0 1.8 1:52.61 mysqld 3134 root 26 10 30824 26m 2956 S 0 1.3 0:07.97 emerge 28085 balancer 15 0 71856 23m 16m S 0 1.2 1:37.81 gnome-panel 28075 balancer 18 0 105m 21m 15m S 0 1.1 0:02.83 nautilus 21354 apache 15 0 38744 17m 4940 S 0 0.9 0:20.41 apache2 13235 apache 18 0 38392 16m 4804 S 0 0.8 0:01.82 apache2 10801 apache 15 0 37840 16m 5004 S 0 0.8 0:21.13 apache2 12761 apache 15 0 37936 16m 4896 S 0 0.8 0:07.73 apache2 12799 apache 15 0 37956 16m 4816 S 0 0.8 0:08.15 apache2 24191 apache 18 0 37652 15m 4912 S 0 0.8 0:18.29 apache2 28090 balancer 15 0 73668 15m 11m S 0 0.8 0:00.63 gnome-terminal 12711 apache 18 0 37640 15m 4904 S 0 0.8 0:07.39 apache2 13260 apache 15 0 37940 15m 4504 S 0 0.8 0:01.09 apache2 14625 apache 15 0 37648 15m 4492 S 0 0.8 0:01.11 apache2 14562 apache 15 0 37644 15m 4496 S 0 0.8 0:00.76 apache2 28186 balancer 15 0 95972 13m 10m S 0 0.7 0:06.99 gweather-applet 28198 balancer 15 0 60468 13m 10m S 0 0.7 0:00.60 mixer_applet2 28035 balancer 15 0 57468 12m 10m S 0 0.6 0:00.26 gnome-session 28103 balancer 15 0 62224 12m 10m S 0 0.6 0:00.43 nm-applet 29690 balancer 15 0 32804 12m 9668 S 0 0.6 0:00.55 kio_uiserver 28071 balancer 18 0 42600 11m 8600 S 0 0.6 0:02.28 gnome-settings- 28184 balancer 15 0 26808 11m 9748 S 0 0.6 0:00.09 gtodo-applet 28176 balancer 15 0 33692 11m 9012 S 0 0.6 0:03.91 kded 28171 balancer 19 0 22216 10m 8616 S 0 0.5 0:09.27 gtk-window-deco 28128 balancer 15 0 31384 10m 8260 S 0 0.5 0:00.39 klipper 9249 root 18 0 30920 9.8m 5324 S 0 0.5 0:00.15 apache2 28182 balancer 15 0 25740 9900 8284 S 0 0.5 0:02.54 geyes_applet2 28866 balancer 15 0 37132 9628 6940 S 0 0.5 0:00.09 knotify 28189 balancer 16 0 25532 9572 7948 S 0 0.5 1:52.11 multiload-apple 28172 balancer 15 0 14652 8664 4328 S 0 0.4 0:38.85 compiz 28139 balancer 15 0 27648 7928 5520 S 0 0.4 0:00.08 gnome-power-man 28174 balancer 15 0 30368 7148 5512 S 0 0.3 0:00.06 klauncher 28113 balancer 34 19 28784 6308 3704 S 0 0.3 0:03.90 trackerd

KRoN73 ★★★★★
()
Ответ на: удаленный комментарий

ой! :))))

anonymous
()
Ответ на: комментарий от birdie

>Через год полтора средний объём RAM на компьютере будет 1,5 - 2GB

Вообще-то, уже. 512Мб - это сегодня даже в России самый лоуэнд. Я со
своим 1Гб на домашние машине - и то уже "нищий" :) Надо бы добавить.
Linux на 2Гб живёт намного приятнее, чем на 1Гб. Можно своп совсем
выключать...

Вот, на работе (машинка среднего класса):

Mem:   2049372k total,  1840960k used,   208412k free,   539148k buffers
Swap:        0k total,        0k used,        0k free,   731072k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                         
28019 root      15   0  403m  86m 8212 S    0  4.3  46:42.63 X                                                                               
28101 balancer  15   0 96152  78m  24m S    0  3.9   1:42.48 konqueror                                                                       
 8471 mysql     15   0  145m  35m 5120 S    0  1.8   1:52.61 mysqld                                                                          
 3134 root      26  10 30824  26m 2956 S    0  1.3   0:07.97 emerge                                                                          
28085 balancer  15   0 71856  23m  16m S    0  1.2   1:37.81 gnome-panel                                                                     
28075 balancer  18   0  105m  21m  15m S    0  1.1   0:02.83 nautilus                                                                        
21354 apache    15   0 38744  17m 4940 S    0  0.9   0:20.41 apache2                                                                         
13235 apache    18   0 38392  16m 4804 S    0  0.8   0:01.82 apache2                                                                         
10801 apache    15   0 37840  16m 5004 S    0  0.8   0:21.13 apache2                                                                         
12761 apache    15   0 37936  16m 4896 S    0  0.8   0:07.73 apache2                                                                         
12799 apache    15   0 37956  16m 4816 S    0  0.8   0:08.15 apache2                                                                         
24191 apache    18   0 37652  15m 4912 S    0  0.8   0:18.29 apache2                                                                         
28090 balancer  15   0 73668  15m  11m S    0  0.8   0:00.63 gnome-terminal                                                                  
12711 apache    18   0 37640  15m 4904 S    0  0.8   0:07.39 apache2                                                                         
13260 apache    15   0 37940  15m 4504 S    0  0.8   0:01.09 apache2                                                                         
14625 apache    15   0 37648  15m 4492 S    0  0.8   0:01.11 apache2                                                                         
14562 apache    15   0 37644  15m 4496 S    0  0.8   0:00.76 apache2                                                                         
28186 balancer  15   0 95972  13m  10m S    0  0.7   0:06.99 gweather-applet                                                                 
28198 balancer  15   0 60468  13m  10m S    0  0.7   0:00.60 mixer_applet2                                                                   
28035 balancer  15   0 57468  12m  10m S    0  0.6   0:00.26 gnome-session                                                                   
28103 balancer  15   0 62224  12m  10m S    0  0.6   0:00.43 nm-applet                                                                       
29690 balancer  15   0 32804  12m 9668 S    0  0.6   0:00.55 kio_uiserver                                                                    
28071 balancer  18   0 42600  11m 8600 S    0  0.6   0:02.28 gnome-settings-                                                                 
28184 balancer  15   0 26808  11m 9748 S    0  0.6   0:00.09 gtodo-applet                                                                    
28176 balancer  15   0 33692  11m 9012 S    0  0.6   0:03.91 kded                                                                            
28171 balancer  19   0 22216  10m 8616 S    0  0.5   0:09.27 gtk-window-deco                                                                 
28128 balancer  15   0 31384  10m 8260 S    0  0.5   0:00.39 klipper                                                                         
 9249 root      18   0 30920 9.8m 5324 S    0  0.5   0:00.15 apache2                                                                         
28182 balancer  15   0 25740 9900 8284 S    0  0.5   0:02.54 geyes_applet2                                                                   
28866 balancer  15   0 37132 9628 6940 S    0  0.5   0:00.09 knotify                                                                         
28189 balancer  16   0 25532 9572 7948 S    0  0.5   1:52.11 multiload-apple                                                                 
28172 balancer  15   0 14652 8664 4328 S    0  0.4   0:38.85 compiz                                                                          
28139 balancer  15   0 27648 7928 5520 S    0  0.4   0:00.08 gnome-power-man                                                                 
28174 balancer  15   0 30368 7148 5512 S    0  0.3   0:00.06 klauncher                                                                       
28113 balancer  34  19 28784 6308 3704 S    0  0.3   0:03.90 trackerd                

KRoN73 ★★★★★
()
Ответ на: комментарий от GFORGX

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

>Наверное, скоро они закроют исходники... Ведь для вендоламов это не имеет значения. Короче, они сошли с ума.

Эта фраза в комментариях не нуждается, чистейший бред.

>И ещё раз спасибо Netscape.

А вот эта фраза уже интересна. Если вы благодарите Netscape за открытие исходников NC4, то безусловно огромное спасибо этой компании. Покойся с миром. Если вы благодарите AOL за NN9, то благодарить вы должны Mozilla, т. к. NN9 = FF2 + другая тема + парочка дополнений. Больше там НИЧЕГО не меняли.

anonymous
()
Ответ на: комментарий от pitekantrop

>> браузер mozilla - это переписанный _с нуля_ netscape

> Чего ты решил, что с нуля?

один еврей нашептал, Joel Spolsky.

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