Утечка памяти в pthread_create! Срочно!!!
От: hdg700  
Дата: 14.04.08 04:49
Оценка:
Всем привет!
У меня возникла проблема.
При каждом вызове pthread_create() память бесщадно съедается и не освобождается даже после завершения потока..

Без вызова функции ps выдает следующее:
user 5289 0.0 0.0 3000 1120 pts/3 S+ 09:03 0:00 ./prog

С вызовом функции:
user 5682 0.0 0.0 13240 1128 pts/3 Sl+ 09:08 0:00 ./prog


Функция вызывается следующим образом:

pthread_t t;
pthread_attr_t att;
pthread_attr_init(&att);
pthread_attr_setdetachstate(&att, PTHREAD_CREATE_DETACHED);
pthread_create(&t, &att, thread, NULL);        
pthread_attr_destroy(&att);


Функция void *thread(void* param) не выполняет ничего. Сразу завершается.
В общем, я уверен, что утечка происходит при вызове pthread_create().
В чем тут может быть дело?
Заранее спасибо.
Re: Утечка памяти в pthread_create! Срочно!!!
От: _kostet_ Россия  
Дата: 14.04.08 07:51
Оценка:
hdg700 wrote:
> Функция void *thread(void* param) не выполняет ничего. Сразу завершается.
> В общем, я уверен, что утечка происходит при вызове pthread_create().
> В чем тут может быть дело?
> Заранее спасибо.

ты не выполняешь необходимого действия для завершения потока
читай man pthread_join
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Утечка памяти в pthread_create! Срочно!!!
От: _kostet_ Россия  
Дата: 14.04.08 07:54
Оценка:
> hdg700 wrote:
>> Функция void *thread(void* param) не выполняет ничего. Сразу завершается.
>> В общем, я уверен, что утечка происходит при вызове pthread_create().
>> В чем тут может быть дело?
>> Заранее спасибо.

аааа, стоп
сразу не углядел, у тебя он в детачед стейт...
Posted via RSDN NNTP Server 2.1 beta
Re[3]: Утечка памяти в pthread_create! Срочно!!!
От: hdg700  
Дата: 14.04.08 08:43
Оценка:
Здравствуйте, _kostet_, Вы писали:

__>аааа, стоп

__>сразу не углядел, у тебя он в детачед стейт...

Вот в том то и дело, что детачед.

mtrace() показывает, что внутри самой функции thread() память не выделяется.

Память выделяется именно при вызове pthread_create().

Может, память выделяется под стек потока?
Или у меня какая-то косячная реализация библиотеки pthread?
или еще что-нибудь.... подскажите.. я уже не знаю, куда копать.
Re: Утечка памяти в pthread_create! Срочно!!!
От: ДимДимыч Украина http://klug.org.ua
Дата: 14.04.08 09:09
Оценка:
Здравствуйте, hdg700, Вы писали:

H>В общем, я уверен, что утечка происходит при вызове pthread_create().


Утечка происходит при каждом вызове pthread_create() или единожды? Попробуйте вызвать ее несколько раз в цикле.
Может это какая-нибудь отложенная инициализация nptl.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re[2]: Утечка памяти в pthread_create! Срочно!!!
От: hdg700  
Дата: 14.04.08 09:43
Оценка:
Здравствуйте, ДимДимыч, Вы писали:

ДД>Утечка происходит при каждом вызове pthread_create() или единожды? Попробуйте вызвать ее несколько раз в цикле.

ДД>Может это какая-нибудь отложенная инициализация nptl.

Да, утечка происходит при каждом вызове pthread_create() из любого места программы.
Каждый раз занимается по 10 мегабайт памяти..
Re: Утечка памяти в pthread_create! Срочно!!!
От: _kostet_ Россия  
Дата: 14.04.08 11:23
Оценка:
hdg700 wrote:

[]

а что за система ?
вообще странно это
предлагаю погонять в цикле pthread_create под valgrind'ом и посмотреть
Posted via RSDN NNTP Server 2.1 beta
Re[3]: Утечка памяти в pthread_create! Срочно!!!
От: Андрей Коростелев Голландия http://www.korostelev.net/
Дата: 14.04.08 12:24
Оценка:
Здравствуйте, hdg700, Вы писали:

H>Здравствуйте, ДимДимыч, Вы писали:


ДД>>Утечка происходит при каждом вызове pthread_create() или единожды? Попробуйте вызвать ее несколько раз в цикле.

ДД>>Может это какая-нибудь отложенная инициализация nptl.

H>Да, утечка происходит при каждом вызове pthread_create() из любого места программы.

H>Каждый раз занимается по 10 мегабайт памяти..

Стек потока? Попробуй поиграться с pthread_attr_getstacksize/pthread_attr_setstacksize.
-- Андрей
Re[2]: Утечка памяти в pthread_create! Срочно!!!
От: hdg700  
Дата: 14.04.08 13:36
Оценка:
Здравствуйте, _kostet_, Вы писали:

__>а что за система ?

__>вообще странно это
__>предлагаю погонять в цикле pthread_create под valgrind'ом и посмотреть


Система:
-bash-3.1$ cat /proc/version
Linux version 2.6.15-1.2054_FC5smp (bhcompile@hs20-bc1-3.build.redhat.com) (gcc version 4.1.0 20060304 (Red Hat 4.1.0-3))

Зачем в цикле? Зачем отслеживать?
Память кушается при каждом вызове. Когда скушанная память достигает 500 — 600 мегабайт, потоки перестают создаваться.
Я могу что-то новое узнать при отслеживании вызовов в цикле?
Re[3]: Утечка памяти в pthread_create! Срочно!!!
От: ДимДимыч Украина http://klug.org.ua
Дата: 14.04.08 14:53
Оценка:
Здравствуйте, hdg700, Вы писали:

H>Да, утечка происходит при каждом вызове pthread_create() из любого места программы.

H>Каждый раз занимается по 10 мегабайт памяти..

У меня на Вашем примере при первом pthread_create() откусывается ≈ 8 Мб виртуальной памяти, последующие вызовы на памяти не отражаются.
С какими опциями собираете, каким компилятором?
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re[4]: Утечка памяти в pthread_create! Срочно!!!
От: hdg700  
Дата: 14.04.08 15:10
Оценка:
Здравствуйте, ДимДимыч, Вы писали:

ДД>У меня на Вашем примере при первом pthread_create() откусывается 8 Мб виртуальной памяти, последующие вызовы на памяти не отражаются.

ДД>С какими опциями собираете, каким компилятором?

g++ prog.cpp -lpthread -o prog

На что уходят эти 8 мегабайт?
Re[5]: Утечка памяти в pthread_create! Срочно!!!
От: ДимДимыч Украина http://klug.org.ua
Дата: 14.04.08 15:26
Оценка:
Здравствуйте, hdg700, Вы писали:

H>На что уходят эти 8 мегабайт?


На стек.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re[6]: Утечка памяти в pthread_create! Срочно!!!
От: hdg700  
Дата: 14.04.08 15:33
Оценка:
Здравствуйте, ДимДимыч, Вы писали:

ДД>Здравствуйте, hdg700, Вы писали:


H>>На что уходят эти 8 мегабайт?


ДД>На стек.



Почему тогда для каждого потока у меня занова выделяется память?
Это может быть из-за ошибки в самой библиотеке? Может, попробовать обновить ее?
Re[7]: Утечка памяти в pthread_create! Срочно!!!
От: ДимДимыч Украина http://klug.org.ua
Дата: 14.04.08 16:05
Оценка:
Здравствуйте, hdg700, Вы писали:

H>Почему тогда для каждого потока у меня занова выделяется память?


У Вас выделяется физическая память или виртуальная? Если виртуальная, то может это такая стратегия аллокатора?
Дайте полный пример с запуском нескольких нитей, тогда можно будет о чем-то говорить.

H>Это может быть из-за ошибки в самой библиотеке? Может, попробовать обновить ее?


Все может быть.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Re[8]: Утечка памяти в pthread_create! Срочно!!!
От: hdg700  
Дата: 14.04.08 16:14
Оценка:
Здравствуйте, ДимДимыч, Вы писали:

ДД>У Вас выделяется физическая память или виртуальная? Если виртуальная, то может это такая стратегия аллокатора?

Выделяется виртуальная. Хреновая какая-то стратегия.. мне не нравится..

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

Просто в программе таким же образом, как я уже показывал, создаются потоки.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.