В Чтв, 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); }
alter@alter:~/tmp/src$ gcc -o pthead pthead.c -lpthread
alter@alter:~/tmp/src$ ulimit -s
8192
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