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 ...?
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