2012-06-13 24 views
8

La mia applicazione contiene tra 950-970 connessioni SSL prima di segfaults all'interno di SSL_read. È possibile configurare OpenSSL per accettare più connessioni di questa?OpenSSL configura il numero massimo di connessioni

L'ho programmato per non eseguire alcuna operazione sulle connessioni dopo averli acquisiti, quindi so che questa è una funzione di # connessioni aperte, non # di connessioni attualmente in lettura/scrittura o tempo.

Aggiornamenti:

  • stesso errore su ubuntu nello stesso luogo. Sto lavorando su Ubuntu andando avanti.
  • Stesso errore se raddoppio le dimensioni della macchina (RAM, scambio, CPU) con lo stesso numero di connessioni.
  • Il contesto non è nullo.
  • ulimit -n è impostato su 4096. L'ho verificato impostando anche ulimit -100, in questo caso si è verificato un errore diverso.
  • Il problema si verifica anche se i thread sono raggruppati. Il problema si verifica allo stesso numero di connessioni, a prescindere che ci sia 1 thread/connessione o 1 thread/10 connessioni.

Sto provando a creare OpenSSL dal sorgente con le opzioni di debug abilitate. Sto iniziando a chiedermi se questo richiederà ore o comunque dirmi qualcosa di utile. Ho una domanda su che here.

ho determinato la segfault sta accadendo su questa linea in openssl v 1.0.1.c:

ssl_lib.c:968 

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

Inoltre, ho deciso che questo non in segfault all'interno la funzione ssl_read (che dovrebbe indicare ssl3_read). Il membro method in realtà non è valido e sembra che lo stesso method non sia valido (lo deduco sulla base di "indirizzo dall'aspetto strano")

+0

Riesci a individuare esattamente dove si trova il segfaulting? –

+0

Da qualche parte in SSL_read 3/4 volte e una volta in SSL_get_error. Non so come guardare all'interno di questo con gdb, anche se immagino che comporti la compilazione dal sorgente, l'ottimizzazione di dummying, ecc. – djechlin

+0

Il tuo sistema sta esaurendo la memoria, o qualche altra risorsa, per caso? –

risposta

4

IMHO, sembra che tu abbia raggiunto un limite. Come hai detto, i descrittori dei file numerici sono OK. Quindi, potresti provare ad aumentare le dimensioni dello stack con ulimit. Ad esempio:

ulimit -s 32768 

Inoltre, è possibile utilizzare uno strumento come valgrind, per aiutarvi a scoprire ciò che realmente sta accadendo al punto vostre segfaults app.

Spero che aiuti.

+0

+1 per aver menzionato 'valgrind', che sarebbe sicuramente d'aiuto. – alk

Problemi correlati