[sisyphus] Странные грабли с Pthread !!!
Roman Savochenko
=?iso-8859-1?q?rom=5Fas_=CE=C1_diyaorg=2Edp=2Eua?=
Ср Ноя 10 21:46:29 MSK 2004
Привет народ!
Обнаружил тута странные грабли с потоками (pthread)!
А суть в следующем.
При открытии-закрытии потока наблюдается утечка памяти.
Обнаружилось на серверной задаче которая использует потоки для
распараллеливания обработки клиентских запросов.
При этом, задача, клиентские потоки не держит открытыми, а создаёт при
поступлении запроса.
Т.е при каждом запросе клиента размер сервера в памяти увеличивается на
2Мб!!! (Контролирую по параметру VmSize в ksisguard)
Хотя физически память не расходуется!
Для проверки предположения я написал тестовую программку:
//--------------------- test_threads.c -----------------------------
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
void *Task(void *prm)
{
printf("Start pthread: %d!!!\n",*(int *)prm);
pthread_exit(NULL);
}
int main()
{
int cnt = 100;
pthread_t pthr_tsk;
pthread_attr_t pthr_attr;
pthread_attr_init(&pthr_attr);
pthread_attr_setschedpolicy(&pthr_attr,SCHED_OTHER);
sleep(10);
while(cnt--)
{
pthread_create(&pthr_tsk,&pthr_attr,Task,&cnt);
sleep(1);
}
pthread_attr_destroy(&pthr_attr);
sleep(10);
return 0;
}
//--------------------- test_threads.c -----------------------------
Имеем значения параметра VmSize:
- в начале теста: 2.424 Мб
- в конце теста: 207.360 Мб!!!
Круто для такой маленькой программки! :)
Кстате это актуально не только для ALTLinux2.4 но и для древнего
ASPLinux7.3!
Это я чего-то не понял или это действительно грабли?
С уважением Роман!
Подробная информация о списке рассылки Sisyphus