Жор памяти при большом кол-ве потоков
От: Аноним  
Дата: 10.11.05 11:03
Оценка:
Обнаружилась очень странная вещь (тестировали на FreeBSD 5.4 и Slackware 10, под win32 такого не наблюдается)

В программе создается большое (100-1000, не важно) кол-во потоков (pthread_create)
Внутри потоков память НЕ выделяется. т.е. они сразу завершаются после создания.

Используемая память, как показывают top/ps, при этом вырастает очень сильно (при 300 потоках — 100mb)
После завершения всех потоков эта память не освобождается.
При повторном создании тех же потоков — цифра опять остается такая же (иногда бывают небольшие колебания).

Пробовали линковать с разными потоковыми библиотеками — ситуация повторяется (только объем памяти немного разный бывает)

P.S. Это было замечено сначала на своем проекте (портированом из win32), потом на AOLServer (open-source вебсервер от AOL), потом написали специальный тест.

Что бы это могло быть ?
Re: Жор памяти при большом кол-ве потоков
От: sakhnik Украина http://koresha.org/sakhnik
Дата: 10.11.05 11:09
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Что бы это могло быть ?


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

Жизнь — это чудо! Только вперёд: sakhnik@jabber.kiev.ua
Re: Жор памяти при большом кол-ве потоков
От: ilnar Россия  
Дата: 10.11.05 11:11
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Обнаружилась очень странная вещь (тестировали на FreeBSD 5.4 и Slackware 10, под win32 такого не наблюдается)


А>В программе создается большое (100-1000, не важно) кол-во потоков (pthread_create)

А>Внутри потоков память НЕ выделяется. т.е. они сразу завершаются после создания.

А>Используемая память, как показывают top/ps, при этом вырастает очень сильно (при 300 потоках — 100mb)

А>После завершения всех потоков эта память не освобождается.
А>При повторном создании тех же потоков — цифра опять остается такая же (иногда бывают небольшие колебания).

А>Пробовали линковать с разными потоковыми библиотеками — ситуация повторяется (только объем памяти немного разный бывает)


А>P.S. Это было замечено сначала на своем проекте (портированом из win32), потом на AOLServer (open-source вебсервер от AOL), потом написали специальный тест.


А>Что бы это могло быть ?


неужели потоковый стек?
и странно что оно не чистится, может ссылки на потоки остаются?
Re[2]: Жор памяти при большом кол-ве потоков
От: d-ash  
Дата: 10.11.05 11:16
Оценка:
Здравствуйте, sakhnik, Вы писали:

S>Здравствуйте, Аноним, Вы писали:


А>>Что бы это могло быть ?


S>На каждый поток система выделяет память под стек.

S>Одна киевская фирма Developex предлагает претендентам написать маленький прокси-сервер, в котором не запускался бы отдельный поток для обработки запроса каждого клиента...

И что? Разве после завершения потока эта память (под его стек) не освобождается? или может не сразу освобождается?

Еще уточню: при повторном создании этих потоков памяти остается СТОЛЬКО ЖЕ, т.е. она не прибавляется, а используется под новые потоки...
Re[2]: Жор памяти при большом кол-ве потоков
От: d-ash  
Дата: 10.11.05 11:20
Оценка:
Здравствуйте, ilnar, Вы писали:

I>неужели потоковый стек?

I>и странно что оно не чистится, может ссылки на потоки остаются?

Какие ссылки? pthread_t — остаются, конечно, но они не валидные уже. Но как это может быть связано с памятью..
Re[3]: Жор памяти при большом кол-ве потоков
От: ilnar Россия  
Дата: 10.11.05 11:23
Оценка:
Здравствуйте, d-ash, Вы писали:

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


I>>неужели потоковый стек?

I>>и странно что оно не чистится, может ссылки на потоки остаются?

DA>Какие ссылки? pthread_t — остаются, конечно, но они не валидные уже. Но как это может быть связано с памятью..


в винде пока есть валидные ссылки (хендлы по ихнему), данные потока остаются
Re[4]: Жор памяти при большом кол-ве потоков
От: d-ash  
Дата: 10.11.05 11:27
Оценка:
Здравствуйте, ilnar, Вы писали:

I>>>неужели потоковый стек?

I>>>и странно что оно не чистится, может ссылки на потоки остаются?

DA>>Какие ссылки? pthread_t — остаются, конечно, но они не валидные уже. Но как это может быть связано с памятью..


I>в винде пока есть валидные ссылки (хендлы по ихнему), данные потока остаются


так в винде все нормально работает.
кроме того, я ж говорю pthread_t хэндлы уже должны быть не валидные, потому что поток завершился, причем не важно joinable он (с последующим pthread_join) или detached.
Re[5]: Жор памяти при большом кол-ве потоков
От: ilnar Россия  
Дата: 10.11.05 11:29
Оценка:
Здравствуйте, d-ash, Вы писали:

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


I>>>>неужели потоковый стек?

I>>>>и странно что оно не чистится, может ссылки на потоки остаются?

DA>>>Какие ссылки? pthread_t — остаются, конечно, но они не валидные уже. Но как это может быть связано с памятью..


I>>в винде пока есть валидные ссылки (хендлы по ихнему), данные потока остаются


DA>так в винде все нормально работает.

DA>кроме того, я ж говорю pthread_t хэндлы уже должны быть не валидные, потому что поток завершился, причем не важно joinable он (с последующим pthread_join) или detached.

надо просто зайти и спросить у разработчика
Re[6]: Жор памяти при большом кол-ве потоков
От: d-ash  
Дата: 10.11.05 11:35
Оценка:
Здравствуйте, ilnar, Вы писали:

I>надо просто зайти и спросить у разработчика


Я и есть разработчик
А в AOLServer просто случайно такую же особенность нашли..
Re[7]: Жор памяти при большом кол-ве потоков
От: ilnar Россия  
Дата: 10.11.05 11:56
Оценка:
Здравствуйте, d-ash, Вы писали:

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


I>>надо просто зайти и спросить у разработчика


DA>Я и есть разработчик

DA>А в AOLServer просто случайно такую же особенность нашли..

да нет, у разработчика операционки
Re: Жор памяти при большом кол-ве потоков
От: execve  
Дата: 10.11.05 12:34
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Обнаружилась очень странная вещь (тестировали на FreeBSD 5.4 и Slackware 10, под win32 такого не наблюдается)


Какая реализация потоков используется?
Re[2]: Жор памяти при большом кол-ве потоков
От: d-ash  
Дата: 10.11.05 14:20
Оценка:
Здравствуйте, execve, Вы писали:

E>Здравствуйте, Аноним, Вы писали:


А>>Обнаружилась очень странная вещь (тестировали на FreeBSD 5.4 и Slackware 10, под win32 такого не наблюдается)


E>Какая реализация потоков используется?


pthread

линковали и с libthr и с libr_c — тоже самое, но памяти чуть меньше отъедается.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.