2014-11-03 18 views
6

Dostrajam wydajność Tomcat 7, serwer jest wyposażony w 24 rdzeni i 32 GB pamięci, mój interfejs testowy jest usługą RESTful bez żadnego procesu (natychmiast odpowiedź), a konfiguracja server.xml jest taka jak następujących ...Tomcat dostrajanie wydajności

<Connector port="8088" protocol="HTTP/1.1" 
      connectionTimeout="20000" 
      redirectPort="8443" 
      enableLookups="false" 
      compression="off" 
      maxConnections="8192" 
      maxThreads="1000" 
      tcpNoDelay="true"/> 

i konfigurację JVM ...

-Xms8192M -Xmx16384M. 

gospodarzem JMeter jest inny komputer ma taką samą specyfikację z powyższym serwerze. A konfiguracja sterty JMeter to -Xms12218m -Xmx24426m.

Mój plan testowy JMeter składa się z 240 żądań wysłanych jednocześnie do interfejsu RESTful, ale zauważyłem, że średni czas odpowiedzi dla pierwszych 100 jest nie dłuższy niż 50 ms, ale wzrasta do 1 sekundy w następnych 100 i do 3 sekund na resztę.

Jestem ciekawy tego zjawiska, czy są jakieś błędy w konfiguracjach lub sugestie?

Z góry dziękuję.

+0

Nie sądzę, że skonfigurowanie procesu mającego 16-24 gigabajty pamięci RAM jest dobrym pomysłem. Dlaczego nie klastrować aplikacji, wysyłając żądania do wielu serwerów? – Stefan

+0

Dziękuję za odpowiedź i muszę znać ekstremum pojedynczego węzła, abyśmy mogli mieć najmniejszą liczbę serwerów, aby spełnić wymagania. –

Odpowiedz

6

Możesz config:

acceptCount="2048" 

i

maxConnections="1024" 

W MaxConnections ma związek z maxThreads i należy skonfigurować maxThreads dopasować swoją firmę i numer CPU, takich jak 8x lub 16x . acceptCount to oczekiwany numer połączenia.

Należy pamiętać, że maxConnections i maxThreads nie są tym większe, im wydajniejsze są urządzenia serwerowe.

+1

Witamy w StackOverflow i dziękuję za wniesienie wkładu. Twoja odpowiedź zostałaby znacznie poprawiona, gdybyś dodał kilka słów wyjaśniających Twoją sugestię.Chociaż dla ciebie oczywiste, może nie być oczywiste dla pytającego lub innych, którzy szukają pomocy w tym samym problemie. – GreenAsJade

0

Im więcej żądań serwer musi obsługiwać, tym więcej czasu zajmuje obsłużenie każdego żądania. To normalne zachowanie.

Jak zaczynacie swoje wątki jednocześnie? Czas rampy = 0 lub 1?

Po uruchomieniu ładowania wątków klient potrzebuje więcej czasu na wykonanie żądań, a serwer potrzebuje więcej czasu na odpowiedź.

Przy uruchomieniu serwer jest w stanie szybko zareagować na wszystkie żądania, ponieważ nie ma nic więcej do roboty, dopóki nie osiągnie progu. Każde z tych żądań zakończy się szybko, a ten sam wątek wyśle ​​kolejne żądanie. W międzyczasie serwer odpowiada na poprzednią falę wątków, podczas gdy coraz więcej robi się w kolejce. Teraz musi zarządzać kolejkami, wciąż odpowiadając na żądania, więc inny próg jest spełniony.

Zasadniczo, rozpoczynanie wielu wątków i wysyłanie żądań jednocześnie nie jest bardzo realistycznym przypadkiem użycia dla serwera, z wyjątkiem kilku przypadków. Gdy jest to istotne, możesz oczekiwać tego zachowania.

+0

Nasz przypadek jest usługą identyfikacji i autoryzacji urządzeń, a będzie ich ponad dziesięć tysięcy. Naszym celem jest, aby czas odpowiedzi mógł zostać wynajęty w ciągu 1 sekundy. I wielkie dzięki za odpowiedź. –

Powiązane problemy