Re: smtp recieving channels

От: Andrew V.Statsenko <CGatePro_at_mx_ru>
Дата: Thu 15 Nov 2007 - 19:58:37 MSK

В Чтв, 15/11/2007 в 18:09 +0300, Dmitry Akindinov пишет:
> Здравствуйте,

>
> В линуксе по умолчанию процесс ограничен 1024 тредами, а в CGPro каждое
> активное сетевое соединение отрабатывается отдельнымтредом. Поэтому,
> когда тредов. отрабатывающих SMTP, становится слишком много, у процесса
> могут начаться проблемы с созданием тредов для отработки запросов по
> другим протоколам.

Хм.. Дмитрий, за что ж вы так Linux не любите ? :-)

alter@alter:~/tmp/src$ uname -r
2.6.18-4-vserver-686

alter@alter:~/tmp/src$ cat pthead.c

#include <pthread.h>
#include <stdio.h>
#define NUM_THREADS     8192

void *PrintHello(void *threadid)
{

   int tid;
   tid = (int)threadid;
   printf("Hello World! It's me, thread #%d!\n", tid);    sleep(60);
   pthread_exit(NULL);
}

int main (int argc, char *argv[])
{

   pthread_t threads[NUM_THREADS];
   int rc, t;
   for(t=0; t<NUM_THREADS; t++){

      //printf("In main: creating thread %d\n", t);
      rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);
      if (rc){
         printf("ERROR; return code from pthread_create() is %d\n", rc);
         exit(-1);
      }

   }
   pthread_exit(NULL);
}

alter@alter:~/tmp/src$ gcc -o pthead pthead.c -lpthread

alter@alter:~/tmp/src$ ulimit -s
8192

alter@alter:~/tmp/src$ ./pthead
Hello World! It's me, thread #0!
Hello World! It's me, thread #1!
....

Hello World! It's me, thread #377!
Hello World! It's me, thread #378!
ERROR; return code from pthread_create() is 12

Ой.. упали... Ну ничего :-)

alter@alter:~/tmp/src$ ulimit -s 256

alter@alter:~/tmp/src$ ./pthead
Hello World! It's me, thread #0!
Hello World! It's me, thread #1!
....

Hello World! It's me, thread #8190!
Hello World! It's me, thread #8191!

alter@alter:~/tmp/src$ ps -L -p 12801 | wc -l 8194

Таки взлетело !

Для себя я это ничем иным как pre-commited thread stack объяснить не могу.

2 Maxim Berlin :

Вам бы действительно попробовать перебраться на ветку 2.6, убедиться, что в /etc/init.d/CommuniGate отключен LD_ASSUME_KERNEL , а также попробовать вставить туда :

ulimit -s 4096 или еще поменьше.

Хотя совершенно не уверен, что поможет и это скорее вопрос к разработчикам, чья, собственно, любовь к Linux известна.. ;-)

--
С уважением,
Андрей Стаценко Получено Thu Nov 15 16:58:43 2007

Этот архив был сгенерирован hypermail 2.1.8 : Fri 24 Apr 2015 - 16:15:52 MSK