2010-07-05 8 views
6

Mam instalację Apache + Tomcat z mod_jk na 2 serwerach. Każdy serwer ma swoją własną parę Apache + Tomcat, a każde żądanie jest obsługiwane przez pracowników równoważenia obciążenia Tomcat na 2 serwerach.Apache + Tomcat z mod_jk: ustawienie maxThread po wyważeniu obciążenia

Mam pytanie dotyczące ustawienia zestawu Apache: maxClient i Tomcat's maxThread.

Numery domyślne, Apache: maxClient=150, Tomcat: maxThread=200

W tej konfiguracji, jeśli mamy tylko 1 konfigurację serwera, to działa dobrze jako pracownik Tomcat nie odbiera połączenia przychodzące ponad 150 naraz. Jednakże, jeżeli równoważymy obciążenie między 2 serwerami, czy możliwe jest, że pracownik Tomcat otrzyma 150 + (pewna liczba z innego serwera) i spowoduje przepełnienie maxThread jako SEVERE: All threads (200) are currently busy?

Jeśli tak, czy powinienem ustawić w tym przypadku Tomcat's maxThread=300?

Dzięki

+0

W konfiguracji 2 serwerów, w jaki sposób równoważenie obciążenia odbywa się na dwóch serwerach Apache? – JoseK

+0

Jest to wykonywane przez router. Ale nie wykonuje żadnego filtrowania według natężenia ruchu. Tak więc każdy Apache może otrzymać 150 żądań (i więcej) na raz. – c4il

Odpowiedz

7

Ustawianie maxThreads do 300 powinno być w porządku - nie ma stałych zasad. Zależy to od tego, czy odbierane są jakiekolwiek połączenia.

Zwiększenie zbyt dużej ilości powoduje duże zużycie pamięci, ale produkcja Tomcaty działają z 750 wątkami. Zobacz również tutaj. http://java-monitor.com/forum/showthread.php?t=235

Czy masz błąd SEVERE? Przetestowałem na naszym Tomcat 6.0.20 i wyświetli się komunikat INFO po przekroczeniu maxThreads.

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

Nie odrzuca połączeń, dopóki nie zostanie przekroczona wartość acceptCount. Wartość domyślna to 100.

Od docs Tomcat http://tomcat.apache.org/tomcat-5.5-doc/config/http.html

Maksymalna długość kolejki dla przychodzących żądań połączeń, gdy wszystkie możliwe przetwarzania żądania gwinty są w użyciu. Wszelkie żądania odebrane po zapełnieniu kolejki zostaną odrzucone. Domyślna wartość jest 100.

Jak to działa jest

1) Wraz ze wzrostem liczby jednoczesnych żądań wzrostu, nici zostanie utworzony do skonfigurowanego maksimum (wartość maxThreads atrybutów).

W twoim przypadku pojawi się komunikat "Maksymalna liczba utworzonych wątków (200)". Jednak żądania będą nadal w kolejce do usługi.

2) Jeśli otrzyma się jeszcze więcej równoczesnych żądań, są one umieszczane w kolejce do skonfigurowanego maksimum (wartość atrybutu acceptCount).

W ten sposób można przyjąć 300 żądań bez awarii. (zakładając, że wartość domyślna to 100)

3) Przekraczanie tej liczby powoduje odrzucenie błędów odrzuconych przez połączenie, dopóki zasoby nie będą dostępne do przetworzenia.

Powinieneś być w porządku, dopóki nie wykonasz kroku 3

+0

Bardzo ładny punkt o akceptacji! To powinno działać idealnie. Przepraszam, że powinienem być bardziej przejrzysty w moim pytaniu, ale było to moje ogólne pytanie typu "co, jeśli". Pierwotnie miałem maxThread = 150 i otrzymałem POWAŻNY błąd. Zmieniłem go z powrotem na domyślny 200, ale potem zdałem sobie sprawę, że 200 nie wystarczy, z tego powodu, który opisałem w pytaniu. Wielkie dzięki za odpowiedź. Teraz wszystko ma sens. – c4il

Powiązane problemy