не высвобождается память

Все о программировании под *nix
Golova
Заглянувший
Сообщения: 7
Зарегистрирован: 22 мар 2006, 17:20

не высвобождается память

Сообщение Golova »

делаю простой тест:
выделяю блоки памяти в цикле
что бы процессор не грузило, делаю sleep.
потом удаляю выделеные блоки памяти.
Но линукс отказывается особождать занятую память, которую например показывает TOP: VIRT, %MEM
т.е. я видел при выделении маскимум на этих счетчиках, напрмер VIRT = 200мб, %MEM = 20 и после удаления памяти эти счетчики остаются неизменными.
под виндой таже программа работает корректно.
всего бы ничего но если выделять больше памяти то система тормозит невероятно - просто вешается (когда кончается оперативная и swap)

Аватара пользователя
fa3a
Неотъемлемая часть форума
Сообщения: 619
Зарегистрирован: 25 июл 2003, 17:22
Откуда: Minsk

Сообщение fa3a »

Golova, а как именно ты выдыляешь память и удаляешь ее? код покажи плиз..
Never touch the running program!!!

Аватара пользователя
Victor Gr.
Неотъемлемая часть форума
Сообщения: 891
Зарегистрирован: 13 авг 2004, 15:39
Откуда: Минск
Контактная информация:

Сообщение Victor Gr. »

Кажется, именно по этой причине Firefox жрёт столько памяти. Где-то я читал, что glibc имеет такое свойство.

Golova
Заглянувший
Сообщения: 7
Зарегистрирован: 22 мар 2006, 17:20

Сообщение Golova »

std::queue<int> q;
int cnt = 0;
while(cnt < 100000) {
for(int i=0;i<100;i++){
SampleClass *p = new SampleClass(param);
usleep(10*1000)
q.push((int)p);
cnt++;
}
ATSL::sleep(10);
}

while(!q.empty()) {
int p = q.front();
q.pop();
delete ((SampleClass*) p);
};

Golova
Заглянувший
Сообщения: 7
Зарегистрирован: 22 мар 2006, 17:20

Сообщение Golova »

динамическая память в SampleClass не выделятся, используются только базовые типы

Аватара пользователя
myst
Маньяк
Сообщения: 190
Зарегистрирован: 04 окт 2005, 15:46
Откуда: не возвращаются

Сообщение myst »

Ну дык, не отдаёт libc/libc++ память системе, не отдаёт. Мало ли, а ты опять зохавать памяти захочешь? Если туда сюда её гонять постоянно, то это ж какие overheads будут!
Иными вечерами я пью, чтобы кого-нибудь не пристрелить. Это акт благотворительности. Не за что.

Аватара пользователя
Victor Gr.
Неотъемлемая часть форума
Сообщения: 891
Зарегистрирован: 13 авг 2004, 15:39
Откуда: Минск
Контактная информация:

Сообщение Victor Gr. »

myst, а што, зусім бяз вольнай памяці ў сістэме, лепей?

А FreeBSD libc/c++ аддае памяць?

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

Victor Gr., существует костыль в виде отдельного _кажется_ malloc из openpsd который подкручивается к firefox путем LD_PRELOAD, так что видимо как-то оно иначе работает....
Опыт растет прямо пропорционально выведенному из строя оборудованию

Golova
Заглянувший
Сообщения: 7
Зарегистрирован: 22 мар 2006, 17:20

Сообщение Golova »

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

Аватара пользователя
myst
Маньяк
Сообщения: 190
Зарегистрирован: 04 окт 2005, 15:46
Откуда: не возвращаются

Сообщение myst »

Victor Gr. писал(а):myst, а што, зусім бяз вольнай памяці ў сістэме, лепей?
Нет серебрянной пули. Если памяти не хватает *BSD прибивает самый прожорливый процесс.
Victor Gr. писал(а):А FreeBSD libc/c++ аддае памяць?
Отадёт память только OpenBSD, насколько мне известно, возможно и NetBSD, но не уверен. FreeBSD память не отдаёт.
Иными вечерами я пью, чтобы кого-нибудь не пристрелить. Это акт благотворительности. Не за что.

Аватара пользователя
Victor Gr.
Неотъемлемая часть форума
Сообщения: 891
Зарегистрирован: 13 авг 2004, 15:39
Откуда: Минск
Контактная информация:

Сообщение Victor Gr. »

Golova, перазапусьці працэс. Форк дык наўрадці дапамажэ.

myst, ну цікава... Лёгікі ніякай. Дык навошта тады free () рабіць?

Golova
Заглянувший
Сообщения: 7
Зарегистрирован: 22 мар 2006, 17:20

Сообщение Golova »

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

Foxx
Неотъемлемая часть форума
Сообщения: 435
Зарегистрирован: 03 апр 2004, 17:05
Контактная информация:

Сообщение Foxx »

попробуйте valgrind спросить, что он думает о реаллокации памяти
попробуйте libgc1c2, авось да поможет
пересмотрите необходимость хранения в памяти одновременно большого количества объектов класса
гадать что к чему можно долго

Аватара пользователя
Victor Gr.
Неотъемлемая часть форума
Сообщения: 891
Зарегистрирован: 13 авг 2004, 15:39
Откуда: Минск
Контактная информация:

Сообщение Victor Gr. »

Aleksey Kondratenko, у меня Firefox 2 за двое суток непрерывной разработки сайта (частые обновления, много вкладок) вычерпывает 70% памяти, 521 Мб виртуальной.

При чём даже когда все вкладки закрываешь и оставляешь одну. Я знаю о проблеме FF с памятью, а точнее с её дикой фрагментацией у него, и о том, что glibc не отдаёт... Но, блин!, такими темпами недалеко и весь swap вычерпать и свалиться с out-of-mem.

Скрин: http://users.cosmostv.by/wiktar/ff.png

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

Victor Gr., полагаю flash из браузера выброшен? Ибо оно само по себе течет. Кроме того - погугли насчет openbsd malloc firefox LD_PRELOAD - у меня оно по крайней мере собиралось и не мешало грузится браузеру - авось тебе поможет.

PS: вот кстати исследование вопроса http://mr.himki.net/index-alloc.html
Опыт растет прямо пропорционально выведенному из строя оборудованию

Ответить