Отправляет email-рассылки с помощью сервиса Sendsay

Утечки памяти в в иксовых программах вообще и в Qt в частности

Здравствуйте все!

Только что прочитал на http://linux.org.ru о том, что вышла Qt-3.3.3,
написано, что кроме всего прочего, там исправлены утечки памяти. Как на
практике выглядят такие утечки?
Сейчас стоит Qt-3.3.2 (собрана из SRPM-пакета от Fedora Core 2), сижу в
KDE и пользуюсь в основном программами на Qt. Эти самые утечки имеют
место быть. Явно "течет" Konqueror (3.2.2) и сам X-сервер (процесс X).
Стоит XFree86-4.3.0 из дистрибутива ASP Linux 9, пересобран из SRPM с
оптимизацией. Вот и непонятно: может ли расти объем в памяти X-сервера
из-за утечек в Qt? Или же я перемудрил где-то. Не могу точно сказать,
когда такое началось.
Еще очень быстро растет объем Gkrellm, но это, похоже, его собственные
заморочки (стоит версия 2.2.1, с 2.2.0 было то же самое, а с 2.1.9
такого не наблюдалось).
Спасибо за ответы-советы.
PS: попробую поставить Qt-3.3.1, посмотрю, что будет, 3.3.2 ставил ради
KDE 3.3, но похоже у меня не хватит денег выкачать его по модему :(

Ответить   Fri, 13 Aug 2004 00:58:04 +1100 (#210745)

 

Ответы:

On Четверг 12 Август 2004 17:58, 9A4172 wrote:

Объём X сервера растёт из-за того, что он интенсивно использует
динамическую память. Вероятно, что и konqueror пухнет по этой же
причине. Не забывайте, что память, освободившаеся у процесса
обратно в систему возвращается только после его завершения, а её
повторному использованию внутри процесса может помешать
сегментация, особенно если захват и освобождение больших блоков
следуют без какой-либо закономерности.

У меня X достаточно быстро распухает мегабайт до 100, а потом
расти перестаёт. А из konqueror-ов я периодически выхожу.

Утечки памяти тоже, наверное есть, только крупные утечки обычно
устраняются быстро, а мелкие расходуют памяти не больше, чем
сегментация.

Вряд ли поможет. Тут совет один - добавлять RAM. Мне 256M было
мало для работы под KDE, а 512 вполне хватает.

Ответить   "Sergey B. Khvatov" Fri, 13 Aug 2004 09:50:36 +0400 (#210825)

 

13 Август 2004 09:50, Sergey B. Khvatov написал:

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

cut here #include <iostream>
#include <stdlib.h>

using namespace std;

int main(int argc, char **argv)
{
void * pc;
const int SZ = 100000000;
char c;
cout << "Before taking memory, type a char> ";
cin >> c;
pc = calloc(SZ, 1);
cout << "After taking " << SZ << " memory. Type a char > ";
cin >> c;
free(pc);
cout << "After freeing memory. Type a char > ";
cin >> c;
return 0;
}
cut here Собирать, естественно, g++

Ответить   Vladimir Efremov Fri, 13 Aug 2004 14:18:52 +0400 (#211002)

 

On Пятница 13 Август 2004 14:18, Vladimir Efremov wrote:

Правильно, но малореально. Такое случается только в специально
написаных программах :-)

Ответить   "Sergey B. Khvatov" Fri, 13 Aug 2004 14:26:08 +0400 (#211013)

 

..:: Fri, 13 Aug 2004 09:50:36 +0400
активировался спутник-шпион и засек, что
тов."Sergey B. Khvatov" <xbat***@t*****.ru> написал следующее:
[cut]

Маньяк :) У меня 256МБ стоит и нормально и КДЕ и Гномастый пашут (ничего не пересобиралось,
все из стандартной поставки Слакваря9.1)

ЗЫ а то людей тут заоблачными значениями памяти пораспугают ;)

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 10801; Возраст листа: 384; Участников: 1243
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/211266



-*Информационный канал Subscribe.Ru
Адрес подписки:
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Отписать: mailto:comp.soft.linux.discuss--unsub@subscribe.ru

http://subscribe.ru/ http://subscribe.ru/feedback

Ответить   Fri, 13 Aug 2004 20:52:32 +0400 (#211266)

 

On Пятница 13 Август 2004 20:52, Nick Mikhaylov wrote:

Так я работаю, а не только по интернету болтаюсь. У меня kdevelop
висит, gcc для двух платформ пашут, да ещё сервисы для
разрабатываемого проекта висят (WMS например).

Ответить   "Sergey B. Khvatov" Mon, 16 Aug 2004 09:41:13 +0400 (#212343)

 

Здравствуйте, "Sergey B. Khvatov" <xbat***@t*****.ru> !
Вы писали Fri, 13 Aug 2004 09:50:36 +0400:

У меня как раз 512 Мб. Просто неприятно как-то: в ASPLinux 9 с штатным
KDE 3.1.1 сразу после загрузки безо всяких прибамбасов использованная
память (без кэша и буферов) составляла около 65 Мб, правда, при запуске
любой программы увеличивался до 90 Мб. Сейчас с KDE 3.2.2 - "голый"
занимает около 85-110 Мб (сразу после загрузки, почему такой разброс,
не знаю).
У меня ASPLinux 9, swap отключен, запущен необходимый минимум
демонов, сверх него: lm_sensors, vmware, hddtemp, pdnsd, privoxy
(маленький некэширующий прокси-сервер). Стартует KDE 3.2.2: xxkb,
XBindKeys, Kicker(часы, апплеты для регулирования громкости, KSysGuard с
3-мя индикаторами), KAlarm, KOrganizer, KSocrat, Stardict, Gkrellm,
XMMS, Konsole, Kate, Konqueror (предзагрузка отключена); запускаю
Sylpheed и Opera (с несколькими открытыми файлами) - все это хозяйство
сразу занимает 150-160 Мб. При работе растет до какого-то предела и
балансирует в районе 200-300 Мб (только надо иногда перезапускать
Konqueror и Gkrellm, да и в Opera если открыть много вкладок, то после
закрытия память не возвращается полностью). Это нормально? Как у кого с
KDE?
И еще: в некоторых программах в скрипте configure есть опция
--enable-final (впервые я ее заметил в KDE 3.2.0), написано, что это
экспериментальная опция, позволяющая уменьшить расход памяти. За счет
чего это достигается? Если кто пробовал, действительно уменьшается
потребная память и насколько? Как это отражается на быстродействии и
(без)глючности?
PS: KDE мне нравится принципиально, пробовал GNOME и всякие оконные
менеджеры - неудобно. И, пожалуйста, не надо начинать священных войн.

Ответить   9A4172 Sat, 14 Aug 2004 14:04:47 +1100 (#211422)

 

9A4172 пишет:

У меня только X занимает от 148 Мб сразу после включения. Причем при запуске
всевозможный
программ он растет, но незначительно (мегабайт на 10). При закрытии всех этих
программ, Х
освобождает память и занимает опять 148 Мб. Судя по всему у Вас он занимает намного
меньше...
Причем от оконного менеджера занимаемый обьем памяти процессом Х не изменяется.
Вот и вопросик
напрашивается, вы иксы сами собирали или их ставили при стандартной установке
дистрибутива?

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 10824; Возраст листа: 386; Участников: 1244
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/211799



-*Информационный канал Subscribe.Ru
Адрес подписки:
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Отписать: mailto:comp.soft.linux.discuss--unsub@subscribe.ru

http://subscribe.ru/ http://subscribe.ru/feedback

Ответить   Sun, 15 Aug 2004 01:11:20 +0300 (#211799)

 

Здравствуйте, Ignatiy Goloviznin <Ign10***@m*****.ru> !
Вы писали Sun, 15 Aug 2004 01:11:20 +0300:

Вот сейчас процесс X занимает 32 Мб (комп загрузился 10 мин назад), при
работе примерно часов 10-20 составляет 40-60 Мб, дольше сейчас у меня
комп не работает, поэтому не могу сказать, как он растет дальше.
XFree86-4.3.0 из дистрибутива ASP Linux 9, пересобран из SRPM с
оптимизацией. Но и когда стояли бинарные пакеты Х занимал примерно
столько же.
Если вы собирали X-сервер из исходников (или SRPM), то, возможно,
включили отладочную информацию (ключ -g для gcc). Я как-то собирал KDE
3.2.0 и забыл про этот ключ - в результате пакеты имели объем в 5-10 раз
(!) больше, чем без отладочной информации. Причем, увеличился объем,
естественно, именно исполняемых файлов и библиотек.

Ответить   9A4172 Sun, 15 Aug 2004 16:03:07 +1100 (#211843)