Dlaczego otrzymuję odmowę połączenia po 1024 połączeniach?
Testuję na lokalnym serwerze Linux z serwerem i klientem na tym samym serwerze. Po około 1024 połączeniach w moim kodzie, w których się łączę, otrzymuję odmowę połączenia. Na początku myślałem, że to limit 1024 fd_set_max dla select i zmieniłem serwer, aby przeprowadzał ankietę zamiast wyboru, i nadal nie mogę przekroczyć tej liczby. Mój ulimit-n jest ustawiony na 2048 i śledzę lsof na serwerze, wzrasta do około 1033 (nie jestem pewien, czy to dokładna liczba) i kończy się niepowodzeniem. Każda pomoc jest mile widziana.
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
8 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Nie jestem pewien, czy dobrze cię zrozumiałem: czy masz zarówno stronę serwera, jak i klienta w tym samym procesie? Wtedy użyjesz dwa razy więcej deskryptorów plików. Jest to zbliżone do tego, co widzisz z wężem. Jeśli tak nie jest, czy problem może wystąpić po stronie serwera? Proces serwera mógł zabraknąć deskryptorów i nie może już tego zrobić
brać
brak połączeń.
Na
akceptacja strony podręcznika
http://manpages.ubuntu.com/man ... .html
wspomina się, że powinieneś otrzymać zwracaną wartość:
EMFILE
Osiągnięto limit liczby otwartych deskryptorów plików dla każdego procesu.
ENFILE
Osiągnięto limit systemowy dotyczący całkowitej liczby otwartych plików.
Jaki kod błędu otrzymujesz? Oczywiście możesz dodawać tylko połączenia, które zostały pomyślnie _akceptowane
select
lub
poll
.
Wiem, że już wiesz, jak to sprawdzić
ulimit
, ale inni mogą nie wiedzieć:
Anonimowy użytkownik
Potwierdzenie od:
Mój problem polegał na tym, że używałem select, który nie radzi sobie z gniazdami FD powyżej 1024. Więc kiedy zwiększyłem swój limit, mój problem naprawdę się zmienił !!! (czego na początku nie zauważyłem ...)
Dlatego, aby pomóc każdemu z podobnymi problemami:
Jeśli potrzebujesz więcej niż 1024 gniazd, powinieneś to zrobić
Anonimowy użytkownik
Potwierdzenie od:
Jawnie zamykasz gniazda po ich użyciu - close () lub shutdown ().
Nie sądzę. Czy naprawdę masz ponad 1024 jednoczesnych aktywnych połączeń? Aby to zrobić, będziesz musiał mieć zaangażowane pthreads. Prawda?
Anonimowy użytkownik
Potwierdzenie od:
Jaki jest górny limit według innej grupy, którą ma serwer?
Jeden program, którym się opiekowałem (kilka lat temu) miał kod, który ustawiał maksymalny rozmiar pliku na 1 MB. Szkoda, że kiedy został dodany po raz pierwszy, powiększył się, ale z biegiem czasu i limitami plików później, oznaczało to, że zmniejszył się! Czy jest szansa, że serwer ma podobny problem - ustawia maksymalną liczbę otwartych plików na śmiesznie dużą liczbę, np. 1024?
Anonimowy użytkownik
Potwierdzenie od:
Czy przekompilowałeś serwer, gdy powiedziałeś „zmieniono na ankietę”? Czy serwer działa na tym samym koncie? Czy jest to -ing, czy może serwer strumieniowy? Czy otrzymujesz po wywołaniu na kliencie? Czy możesz potwierdzić, że otrzymujesz w odpowiedzi na z ? Czy numery portów klientów są ponownie wykorzystywane? Czy są linki w stanie ?
Anonimowy użytkownik
Potwierdzenie od:
miękki nofile 16535
przez Hard nofile 16535
lub z konsoli spróbuj
ulimit-n 16535
z szacunkiem
Anonimowy użytkownik
Potwierdzenie od:
z szacunkiem