2011-11-16 7 views
7

Attualmente ho un'applicazione distribuita utilizzando Tomcat che interagisce con un database Postgres tramite JDBC. Le query sono molto costose, quindi quello che vedo è un timeout causato da Tomcat o Apache (Apache si trova di fronte a Tomcat nella mia configurazione). Sto cercando di limitare le connessioni al database a 20-30 connessioni simultanee, in modo che il database non sia sopraffatto. L'ho fatto usando la configurazione di \ .., impostando maxActive a 30 e maxIdle a 20. Ho anche fatto un salto su maxWait.Tomcat - Configurazione maxThreads e acceptCount nel connettore HTTP

In questo scenario sto limitando l'UTILIZZO del database, ma desidero che le connessioni/richieste siano PISCINE in Tomcat. Apache può accettare 250 richieste simultanee. Quindi devo assicurarmi che Tomcat possa accettarne anche molti, ma gestirli in modo appropriato.

Tomcat ha due impostazioni nel connettore file di config HTTP:

  • MaxThreads - "il numero massimo di thread di richiesta di elaborazione per essere creato dal connettore HTTP, che determina quindi il numero massimo di simultanei richieste che possono essere gestite. "
  • acceptCount - "La lunghezza massima della coda per le richieste di connessione in entrata quando tutti i possibili thread di elaborazione delle richieste sono in uso. Qualsiasi richiesta ricevuta quando la coda è piena verrà rifiutata."

Quindi immagino che se ho impostato maxThreads per il numero massimo di connessioni JDBC (30), allora posso impostare acceptCount per 250-30 = 220.

io non capisco la differenza tra un thread che sta aspettando su una connessione JDBC per aprirsi dal pool, contro un thread che è in coda ... Il mio pensiero è che un thread in coda stia consumando meno cicli mentre un thread in esecuzione, in attesa sul pool JDBC, essere cicli di spesa controllando il pool per un thread gratuito ...?

+0

Sto provando a valutare l'esperienza di altri utilizzando diversi rapporti di thread: connessioni. Avete i vostri valori di produzione ottimizzati, avete mantenuto il rapporto tra thread max tomcat e connessioni jdbc 250: 30, in caso affermativo, come ha funzionato? – ledlogic

risposta

0

A meno che l'applicazione gestisce richiesta in una questione in cui si collega direttamente al database su una base di collegamento per http, allora si dovrebbe configurare il pool di connessioni JDBC in base a ciò che il software del database è impostato per/può gestire e il tuo maxthread su ciò che l'applicazione/l'hardware può gestire.

0

Mantenere il valore maxActive (del pool di connessioni db) minore di maxThreads (ovvero il numero di thread simultanei) ha senso nella maggior parte dei casi. È possibile impostare acceptCount su un valore superiore in base al tipo di traffico che si prevede nel sito Web e alla velocità di elaborazione di una richiesta.