2012-05-03 15 views
10

Ho eseguito un'applicazione JRuby su Rails. Vedo un sacco di questo in modo casuale nei miei ceppi:Dimensioni pool di connessioni dell'app Rails, evitando problemi di dimensioni massime del pool

The max pool size is currently 5; consider increasing it

ho capito posso aumentare la dimensione massima del pool nella mia configurazione per affrontare questo. Il problema che sto cercando di risolvere è capire quale dovrebbe essere il numero ottimale. Sto cercando di evitare problemi di contesa per le connessioni. Anche l'impostazione di questo numero su qualcosa di odiosamente grande non funzionerà.

Esiste un protocollo generale da seguire per conoscere l'impostazione ottimale delle dimensioni del pool delle app?

+0

Quale server si sta distribuendo? –

risposta

13

Da here,

La dimensione ottimale di un pool di thread dipende dal numero di processori disponibili e la natura dei compiti sulla coda di lavoro. Su un sistema con processore N per una coda di lavoro che manterrà interamente attività legate all'elaborazione, generalmente si otterrà il massimo utilizzo della CPU con un pool di thread di N o N + 1 thread.

Per attività che possono attendere il completamento dell'I/O, ad esempio un'attività che legge una richiesta HTTP da un socket, è necessario aumentare le dimensioni del pool oltre il numero di processori disponibili, perché non tutti i thread funzioneranno sempre. Utilizzando il profilo, è possibile stimare il rapporto tra il tempo di attesa (WT) e il tempo di servizio (ST) per una richiesta tipica. Se chiamiamo questo rapporto WT/ST, per un sistema con processore N, ti consigliamo di avere approssimativamente N * (1 + WT/ST) thread per mantenere pienamente utilizzati i processori.

L'utilizzo del processore non è l'unica considerazione nell'ottimizzazione delle dimensioni del pool di thread. Con l'aumentare del pool di thread, è possibile che si verifichino i limiti del programma di pianificazione, della memoria disponibile o di altre risorse di sistema, quali il numero di socket, gli handle di file aperti o le connessioni al database.

Così profilo la vostra applicazione, se le discussioni che sono per lo più legati cpu, quindi impostare la dimensione pool di thread al numero di core, o il numero di core + 1. Se si stanno spendendo la maggior parte del vostro tempo di attesa per il database chiama a completare, quindi sperimentare un numero piuttosto elevato di thread e vedere come si comporta l'applicazione.

Problemi correlati