Browsers (f???ng memory leaks)

Софт под Linux, разные программы, но только связанные с Linux

Модератор: /dev/random

Аватара пользователя
ety
Сообщения: 358
ОС: Linux

Re: Browsers

Сообщение ety »

есть простая идея:
при каждом вызове malloc делает бэктрейс стека, а после завершения программы, мы смотрим какой именно кусок кода не вернул свою память через free. таким образом за несколько дней можно будет убить все утечьки.

вот код для бэктрейса.
http://alephnull.com/backtrace.html

у меня работает с gcc 4.0.1

по крайней мере в своей проге им убил пару глюков, в особенности кульно смотрится, если приделать к макро assert ;)
Образование - это вовсе не то, чему человека учили, а то, чему он научился.
-----
Время, необходимое на компиляцию пакета обратно пропорционально его полезности и важности его наличия в системе.
Спасибо сказали:
CompoVod
Сообщения: 27

Re: Browsers

Сообщение CompoVod »

zov писал(а):
17.06.2006 23:55
Товарищ mr попытался перенести аллокатор из OpenBSD на Gnu/Linux:

http://mr.himki.net/OpenBSD-malloc.c

% gcc -o libmalloc.so -shared OpenBSD-malloc.c
% LD_PRELOAD=./libmalloc.so firefox

Память отдает ядру в ожидаемых количествах.
На старте имеем VM 20M, с ~30 вкладками ~60M, после закрытия всех вкладок, кроме одной, VM возвращается к ~30M.

Как пишет автор переноса, требуется отладка/тестирование.

ЗЫ сейчас пишу из firefox-1.0.6-gtk1, запущенного с openbsd-malloc на ALT Master 2.4

Вот это интересно.
Поигрался с этой штукой. Система - Debian testing\unstable.
Там в функции malloc_bytes используется arc4random. При загрузке оно ругалось на не найденный символ. Поверхностное гугленье на эту тему показало, что эта штука специфична для openbsd. На linux существует в виде патча к libc. Видимо, в ALT'е этот патч есть, а в дебиане нету :) Пересобирать libc не хотелось. Просто тупо заменил на rand(). Загрузилось.
Память отдает. Но периодически на консоль пишет "free_pages: pointer to wrong pagefirefox-bin in free(): error: modified (chunk-) pointer" после чего firefox виснет. Если скомпилить с -DMALLOC_EXTRA_SANITY, то выдает "firefox-bin in free(): error: (ES): mapped pages not found in directory". Наверное, дело в arc4random.

Вот такие результаты. Автору в любом случае спасибо :)
Спасибо сказали:
Аватара пользователя
zov
Сообщения: 255

Re: Browsers

Сообщение zov »

В ALT arc4random нет. Заменил на rand().

Ругань не из-за алгоритма генережки случайных чисел.
Спасибо сказали:
Аватара пользователя
LXj
Сообщения: 94

Re: Browsers

Сообщение LXj »

Добавлю свои 5 копеек. Сам давно замечал, что с памятью в Линуксе происходят неприятные вещи. А памяти у меня всего 256 мб.

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

Потом были проблемы, когда память уходила после активного пользования связки opera+emacs+openoffice+freeciv. Самое неприятное, что при недостатке памяти во freeciv происходили весьма неприятные вещи. При этом перезапуск тех же Оперы и емакса не помогал. Но к этому моменту я обнаружил, что вместо полной перезагрузки достаточно перезапустить Иксы. Проблема отчасти решилась, когда я уменьшил кэш у Оперы, но в самые напряженные моменты во freeciv (есть для неё аццкий патч, позволяющий двигать десятки юнитов сразу, и когда противник эту фичу использует, у меня наблюдается живописный лаг и резво растет потребление памяти) наблюдаются всё те же симптомы

Помнится, под Вин9х был дефрагментатор памяти -- он оптимизировал кучу и выгружал модули/данные незапущенных программ (я как раз и наблюдал, что после выхода из менкодера, Оперы или Емакса памяти больше почти не становится). Под НТ работу с памятью оптимизировали в ядре, потому там такой дефрагментатор и не нужен. А вот под Линуксом я его вспоминаю...
Спасибо сказали: