2012-06-13 18 views
8

Moja aplikacja przechowuje między 950-970 połączeniami SSL, zanim ulegnie awarii wewnątrz SSL_read. Czy można skonfigurować OpenSSL, aby akceptował więcej połączeń niż to?OpenSSL konfiguruje maksymalną liczbę połączeń

Programowałem go, aby nic nie robić przez połączenia po ich nabyciu, więc wiem, że jest to funkcja # otwartych połączeń, a nie # połączeń aktualnie odczytujących/zapisujących lub czas.

Aktualizacje:

  • sam błąd na ubuntu w tym samym miejscu. Pracuję nad ubuntu.
  • Ten sam błąd, jeśli podwoję swój rozmiar urządzenia (pamięć RAM, zamiana, procesor) na tę samą liczbę połączeń.
  • Kontekst nie jest pusty.
  • ulimit -n jest ustawiona na 4096. Zweryfikowałem to również ustawiając ulimit -100, w tym przypadku zaobserwowano inny błąd.
  • Problem występuje, nawet jeśli wątki są łączone. Problem występuje przy tej samej liczbie połączeń, niezależnie od tego, czy istnieje 1 wątek/połączenie lub 1 wątek/10 połączeń.

Próbuję zbudować OpenSSL ze źródła z włączonymi opcjami debugowania. Zaczynam się zastanawiać, czy to zajmie wiele godzin, czy powiedzieć mi coś przydatnego. Mam pytanie na temat tego here.

Mam ustalił segfault dzieje się na tej linii w openssl przeciwko 1.0.1.c:

ssl_lib.c:968 

968  return(s->method->ssl_read(s,buf,num)); 

Ponadto, mam ustalone, że nie jest to segfaulting wewnątrz funkcja ssl_read (która powinna wskazywać na ssl3_read). Człon ssl_read od method faktycznie nieważne i wydaje się sama method jest również nieważny (ja to wnioskowanie na podstawie „dziwne patrząc adres.”)

+0

Czy potrafisz zlokalizować dokładnie to, gdzie jest to segfault? –

+0

Gdzieś w SSL_read 3/4 razy i raz w SSL_get_error. Nie wiem, jak zaglądać do środka bliżej niż to z gdb, chociaż wyobrażam sobie, że wymaga to kompilacji ze źródła, bezmyślnej optymalizacji, itp. – djechlin

+0

Czy twój systemowi brakuje pamięci lub jakiegoś innego zasobu? –

Odpowiedz

4

IMHO, wydaje się, że osiągnął pewną granicę. Jak już powiedziałeś, deskryptory plików liczbowych są w porządku. Możesz spróbować zwiększyć rozmiar stosu przy pomocy ulimit. Np:

ulimit -s 32768 

Ponadto, można użyć narzędzia jak valgrind, które pomogą Ci dowiedzieć się, co naprawdę dzieje się w momencie twoi zwraca błąd aplikacji.

Mam nadzieję, że to pomaga.

+0

+1 za wzmiankę o "valgrind", którego użycie zdecydowanie pomogłoby tutaj. – alk

Powiązane problemy