2010-07-05 18 views
6

Ho installato Apache + Tomcat con mod_jk su 2 server. Ogni server ha la propria coppia Apache + Tomcat e ogni richiesta viene servita dagli operatori di bilanciamento del carico Tomcat su 2 server.Apache + Tomcat con mod_jk: impostazione maxThread al bilanciamento del carico

Ho una domanda su come impostare Apache maxClient e Tomcat maxThread.

I numeri predefiniti sono, Apache: maxClient=150, Tomcat: maxThread=200

In questa configurazione, se abbiamo solo l'installazione del server 1, che avrebbe funzionato bene come Tomcat lavoratore non riceve mai le connessioni in entrata oltre 150 in una sola volta. Tuttavia, se il bilanciamento del carico avviene tra 2 server, potrebbe essere possibile che Tomcat worker riceva 150 + (un certo numero da un altro server) e effettui l'overflow maxThread come SEVERE: All threads (200) are currently busy?

In tal caso, devo impostare Tomcat's maxThread=300 in questo caso?

Grazie

+0

nella configurazione 2 Server, come è il bilanciamento del carico fatto attraverso i due Apaches? – JoseK

+0

È fatto da un router. Ma non fa alcun filtraggio per volume di traffico. Quindi ogni Apache può ricevere 150 richieste (e più) contemporaneamente. – c4il

risposta

7

Impostazione maxThreads a 300 dovrebbero essere bene - non ci sono regole fisse. Dipende se si vedono connessioni rifiutate.

L'aumento eccessivo causa un elevato consumo di memoria, ma la produzione di Tomcat è nota per l'esecuzione con 750 thread. Vedi anche qui http://java-monitor.com/forum/showthread.php?t=235

Hai effettivamente ricevuto l'errore SEVERE? Ho provato il nostro Tomcat 6.0.20 e lancia un messaggio INFO quando viene superato il maxThreads.

INFO: Maximum number of threads (200) created for connector with address null and port 8080 

Non rifiuta le connessioni finché non viene superato il valore acceptCount. Il valore predefinito è 100.

Dalla documentazione Tomcat http://tomcat.apache.org/tomcat-5.5-doc/config/http.html

la lunghezza massima coda per richieste di connessione quando tutte le possibili thread di elaborazione richieste sono in uso. Qualsiasi richiesta ricevuta quando la coda è piena verrà rifiutata. Il valore predefinito è 100.

Il suo funzionamento è

1) Poiché il numero di richieste simultanee aumento, verrà creato fili fino al massimo configurato (il valore delle maxThreads attributo).

In questo caso, a questo punto verrà visualizzato il messaggio "Numero massimo di thread (200) creati". Tuttavia, le richieste verranno comunque messe in coda per il servizio.

2) Se vengono ricevute ancora più richieste simultanee, vengono accodate al massimo configurato (il valore dell'attributo acceptCount).

Pertanto un totale di 300 richieste può essere accettato senza errori. (supponendo che acceptCount sia impostato su 100)

3) Attraversando questo numero si generano errori di connessione rifiutati, finché non sono disponibili risorse per elaborarli.

Quindi si dovrebbe andare bene fino a colpire il punto 3

+0

Molto bello il punto su acceptCount! Questo dovrebbe funzionare perfettamente. Scusate, avrei dovuto essere più chiaro nella mia domanda, ma era la mia domanda di tipo what-if generale. Inizialmente avevo avuto maxThread = 150 e ho avuto SEVERE errore. Così ho cambiato il valore predefinito di 200, ma poi ho capito che 200 non sarebbero stati sufficienti neanche per il motivo che ho descritto nella domanda. Grazie mille per la risposta. Ha tutto senso ora. – c4il

Problemi correlati