multi-thread server
9 отговора
416 прегледа
multi-thread server
Здравейте,
Имам многонишков socket server(нишките са pthread),
но при заяваки от прекалено много клиенти
на server ми изплюва сигнал SIGSEGV и грешка
"Too many open files". Пробвах да вдигна броят на файловите
дескриптори посредством setrlimit но след това пак изплюва
сигнал SIGSEGV и грешка "Resource unavailabel".
Та випроса ми е как да разреша този проблем.
Разцепих се да ровя из google да настроивам TCP за max
брой connection и т.н. но .....
Server се тества с около 4800 connection
Дистрибуцията е Suse 9.0
Благодаря !
Имам многонишков socket server(нишките са pthread),
но при заяваки от прекалено много клиенти
на server ми изплюва сигнал SIGSEGV и грешка
"Too many open files". Пробвах да вдигна броят на файловите
дескриптори посредством setrlimit но след това пак изплюва
сигнал SIGSEGV и грешка "Resource unavailabel".
Та випроса ми е как да разреша този проблем.
Разцепих се да ровя из google да настроивам TCP за max
брой connection и т.н. но .....
Server се тества с около 4800 connection
Дистрибуцията е Suse 9.0
Благодаря !
Re: multi-thread server
Тази грешка може да идва от доста неща. Все пак виж си параметрите на ядрото, но освен за файловете гледай и параметрите за процесите.
Командата сигурно я знаеш, но ти я пускам за всеки случай
# sysctl -a
I feel like I should have a great idea right now. But I don't.
Командата сигурно я знаеш, но ти я пускам за всеки случай
# sysctl -a
I feel like I should have a great idea right now. But I don't.
Re: multi-thread server
Ами, както се досещаш не достига някъде ресурс за нещо и по тази причина отгърмява.
I feel like I should have a great idea right now. But I don't.
I feel like I should have a great idea right now. But I don't.
Re: multi-thread server
Досештам се но не знам как какво да пипна.
Разбих се от четене и търсене из google амааааааа ...
Разбих се от четене и търсене из google амааааааа ...
Re: multi-thread server
В действителност възможностите са доста и съвет наизуст не мога да дам. Пак ти казвам да разледаш добре параметрите на ядрото. Най-вероятната за момента за мен причина е изчерпването на ресур или достигане на лимитирана стойност с в ядрото.
I feel like I should have a great idea right now. But I don't.
I feel like I should have a great idea right now. But I don't.
Re: multi-thread server
Преди всичко друго би могъл _внимателно_ да прегледаш кода си за неправилно използване на файлови дескриптори -- възможно е поради грешка да ги отваряш и никога да не ги затваряш.
После можеш да направиш няколко неща:
- да видиш с getrlimit колко е "твърдия" максимум за отворени файлове;
- да си "поиграеш" с fs.file-max и fs.file-nr параметри на ядрото;
- да погледнеш изходния код на ядрото за твърдо зададените "максимални максимални" стойности на броя отворени файлове.
Предполагам, след това ще ти "светне под шапката". Успех.
RTFM!
--sdg
После можеш да направиш няколко неща:
- да видиш с getrlimit колко е "твърдия" максимум за отворени файлове;
- да си "поиграеш" с fs.file-max и fs.file-nr параметри на ядрото;
- да погледнеш изходния код на ядрото за твърдо зададените "максимални максимални" стойности на броя отворени файлове.
Предполагам, след това ще ти "светне под шапката". Успех.
RTFM!
--sdg
Re: multi-thread server
Съветите на Linux.Lab и sdg са много добри. Само да допълня няколко неща:
- SEGV при невъзможност за отваряне на файл е следствие на грозно написан код. Оправи си кода.
- В някои случаи дори при затваряне на сокет, той продължава да е отворен известно време. Например ако преди това са изпратени данни, които не са потвърдени от другата страна на сокета.
- Провери броя на отворени от приложението файлове, както и броя и състоянието на сокетите, в момента на забиването. Може да ти просветне нещо.
- SEGV при невъзможност за отваряне на файл е следствие на грозно написан код. Оправи си кода.
- В някои случаи дори при затваряне на сокет, той продължава да е отворен известно време. Например ако преди това са изпратени данни, които не са потвърдени от другата страна на сокета.
- Провери броя на отворени от приложението файлове, както и броя и състоянието на сокетите, в момента на забиването. Може да ти просветне нещо.
Re: multi-thread server
Taka kato te slusham sam pochti ubeden che previshavash max open files za procesa koito po default sa 1024. E nqkoi distribucii mogat i na poveche da se nastroqt ama eto ti edin otkys za da vidish kyde se nastroivat tiq bozi. Trqbva da recompilensh kernel:
Edit the sem.h file (vi +66 /usr/src/linux/include/linux/sem.h) and change the following parameter:
#define SEMMNI 128 /* <= IPCMNI max # of semaphore identifiers */
To read:
#define SEMMNI 512 /* <= IPCMNI max # of semaphore identifiers */
Edit the limits.h file (vi /usr/src/linux/include/linux/limits.h) and change the following parameters:
#define NR_OPEN 1024
To read:
#define NR_OPEN 8192
#define OPEN_MAX 256 /* # open files a process may have */
To read:
#define OPEN_MAX 8192 /* # open files a process may have */
Edit the posix_types.h file (vi +25 /usr/src/linux/include/linux/posix_types.h) and change the following parameter:
#define __FD_SETSIZE 1024
To read:
#define __FD_SETSIZE 8192
Edit the sem.h file (vi +66 /usr/src/linux/include/linux/sem.h) and change the following parameter:
#define SEMMNI 128 /* <= IPCMNI max # of semaphore identifiers */
To read:
#define SEMMNI 512 /* <= IPCMNI max # of semaphore identifiers */
Edit the limits.h file (vi /usr/src/linux/include/linux/limits.h) and change the following parameters:
#define NR_OPEN 1024
To read:
#define NR_OPEN 8192
#define OPEN_MAX 256 /* # open files a process may have */
To read:
#define OPEN_MAX 8192 /* # open files a process may have */
Edit the posix_types.h file (vi +25 /usr/src/linux/include/linux/posix_types.h) and change the following parameter:
#define __FD_SETSIZE 1024
To read:
#define __FD_SETSIZE 8192