Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Blad accept: Too many open files

Ostatnio zmodyfikowano 2025-02-02 23:08
Autor Wiadomość
dunno
Temat założony przez niniejszego użytkownika
Blad accept: Too many open files
» 2025-02-01 18:07:20
Aplikacja postawiona na Debian 11 przed zamknięciem aplikacji wywala wielokrotnie błąd:
accept: Too many open files


aplikacja: https://pastebin.com/w2NgZkhs.

dodatkowo mam zalogowana informacje ze aplikacja sama sie zamknela poniewaz listen_errors przekroczyl 100 i dodane mam wypisywanie w konsoli:
C/C++
accept_errors = 0;
while( g_game.getGameState() != GAME_STATE_SHUTDOWN && accept_errors < 100 )
{
   
   
fd_set listen_set;
   
timeval tv;
   
FD_ZERO( & listen_set );
   
FD_SET( listen_socket, & listen_set );
   
tv.tv_sec = 2;
   
tv.tv_usec = 0;
   
   
int32_t reads =( int32_t ) select( listen_socket + 1, & listen_set, NULL, NULL, & tv ); //VISUAL
   
if( reads == SOCKET_ERROR )
   
{
       
int32_t errnum;
       
#ifdef WIN32
       
errnum = WSAGetLastError();
       
#else
       
errnum = errno;
       
#endif
       
       
if( errnum == ERROR_EINTR )
       
{
           
continue;
       
}
       
else
       
{
           
SOCKET_PERROR( "select" );
           
break;
       
}
    }
   
else if( reads == 0 )
   
{
       
continue;
   
}
   
   
SOCKET s = accept( listen_socket, NULL, NULL ); // accept a new connection
   
OTSYS_SLEEP( 100 );
   
if( s > 0 )
   
{
       
OTSYS_CREATE_THREAD( ConnectionHandler,( void * ) & s );
   
}
   
else
   
{
       
accept_errors++;
       
SOCKET_PERROR( "accept" );
   
}
}
closesocket( listen_socket );
listen_errors++;
}
if( listen_errors >= 100 )
{
std::cout << "ERROR: Server shutted down because there where 100 listen errors." << std::endl;
}


następnie aplikacja zamyka się z bledem w konsoli
ERROR: Server shutted down because there where 100 listen errors.



Obejscie problemu to:
do /etc/security/limits.conf dodalem
username hard nofile 4096

oraz przed uruchamianiem apki dla pewnosci:
ulimit -n 4096

Natomiast wydaje mi sie, ze gdzies te sockety nie sa zamykane poprawnie bylby ktoś w stanie zerknac na kod https://pastebin.com/w2NgZkhs i zobaczyc czy sockety sa zamykane we wlasciwych miejscach?


Source bazowane na:
https://github.com/divinity76/YurOTS/tree/master/ots/source
P-182084
pekfos
» 2025-02-01 19:16:28
Obejscie problemu to:
do /etc/security/limits.conf dodalem
username hard nofile 4096

oraz przed uruchamianiem apki dla pewnosci:
ulimit -n 4096
W żaden sposób nie obejdziesz wycieku zasobów, więc jeżeli to działa i działa stabilnie, to problem jest rozwiązany. Po prostu masz za duży ruch względem konfiguracji programu. Do faktycznej diagnozy powinieneś obserwować użycie deskryptorów plików przez program, np przez
ls -l /proc/pid-programu/fd
 i sprawdzić czy użycie rośnie w przypadku gdy nie powinno. A jeśli rośnie, to co dokładnie rośnie. Te zasoby są używane nie tylko przez sockety.
P-182085
dunno
Temat założony przez niniejszego użytkownika
» 2025-02-01 21:40:15
Jak udało mi się ustalić problem pojawiał się w przypadku ataków DDOS. Na ten moment był ostatni tego typu atak i serwer gry nie został wyłączony, więc jest okej. Dziękuje również jak zawsze za cenne wskazówki.
P-182089
pekfos
» 2025-02-01 23:04:28
Tu wystarczy zwykły atak DoS, bo mechanizm awarii programu nie wymaga dużego ruchu. Potrzeba tylko dużej liczby połączeń, o co dość łatwo. Może po prostu wywal ten warunek wyłączający program. Serwery tak nie działają, bo to tworzy podatność na atak na dostępność usługi.
P-182090
dunno
Temat założony przez niniejszego użytkownika
» 2025-02-02 09:45:24
właśnie rano znowu serwer padł, w logach znowu widać, że celowo ktoś atakował. Zgodnie z twoją radą wyłaczyłem ten warunek, zobaczę co się wydarzy. Dzięki.
P-182092
dunno
Temat założony przez niniejszego użytkownika
» 2025-02-02 18:13:27
Wracam z efektem: teraz serwera nie wywalilo, ale byly mega lagi i padł "login server" tj. nie można było zalogować się do gry ;p
P-182095
dunno
Temat założony przez niniejszego użytkownika
» 2025-02-02 18:26:26
cos mozna na to poradzic z poziomu aplikacji?
P-182096
DejaVu
» 2025-02-02 20:58:39
Możesz np. dorobić jakiś mechanizm szybkiego odrzucania nowych połączeń.
P-182097
« 1 » 2
  Strona 1 z 2 Następna strona