2013-07-08 13 views
5

Używam Play 2.1, aby rozwijać swoją aplikację. Jest to dość łatwe w użyciu środowisko. Jestem w stanie szybko opracować swoją aplikację. Ale natrafiłem też na pewne problemy z skalowalnością. Wygląda na to, że gra 2.1 nie działa tak szybko, jak twierdzono. Może dlatego, że nie wiedziałem, jak dostroić wydajność.Jak dostroić skalowalność aplikacji do gry?

Mój problem jest następujący: Mam interfejs API do logowania użytkownika za pomocą jego/jej poczty e-mail.

Użyłem Apache Benchmark (ab), aby użyć wydajności. Jedno pojedyncze żądanie zajmuje około 230ms. Kiedy jest 5 jednoczesnych żądań, czas odpowiedzi jest wystarczająco szybki, około 280 ms.

Concurrency Level:  5 
Time taken for tests: 0.306 seconds 
Complete requests:  5 
Failed requests:  0 
Write errors:   0 
Total transferred:  3495 bytes 
Total POSTed:   1065 
HTML transferred:  3135 bytes 
Requests per second: 16.34 [#/sec] (mean) 
Time per request:  306.009 [ms] (mean) 
Time per request:  61.202 [ms] (mean, across all concurrent requests) 
Transfer rate:   11.15 [Kbytes/sec] received 
         3.40 kb/s sent 
         14.55 kb/s total 

Connection Times (ms) 
       min mean[+/-sd] median max 
Connect:  1 1 0.1  1  1 
Processing: 280 290 13.8 292  305 
Waiting:  278 288 13.7 291  304 
Total:  280 291 13.9 293  306 

Jednak, gdy użyłem 100 równoczesnych żądań, otrzymałem bardzo złe wyniki.

Concurrency Level:  100 
Time taken for tests: 4.243 seconds 
Complete requests:  100 
Failed requests:  0 
Write errors:   0 
Total transferred:  69900 bytes 
Total POSTed:   21300 
HTML transferred:  62700 bytes 
Requests per second: 23.57 [#/sec] (mean) 
Time per request:  4243.058 [ms] (mean) 
Time per request:  42.431 [ms] (mean, across all concurrent requests) 
Transfer rate:   16.09 [Kbytes/sec] received 
         4.90 kb/s sent 
         20.99 kb/s total 

Connection Times (ms) 
       min mean[+/-sd] median max 
Connect:  1 62 31.5  83  89 
Processing: 996 3744 544.7 3902 4146 
Waiting:  995 3727 542.0 3894 4146 
Total:  1084 3806 542.6 3968 4204 

Mój serwer: Intel i7, 8 rdzeni, 2,8 GHz, 8 GB pamięci. Użyłem domyślnego ustawienia struktury gry. Ktoś wie, jak dostroić wydajność struktury gry?

Myślę, że odnosi się do rozmiaru puli wątków. Dokument mówi, że domyślny rozmiar puli wątków odtwarzania to # rdzenie. W takim przypadku oczekiwany czas na obsłużenie wszystkich 100 żądań wynosi:

230ms * (100/8) = 2875ms 

Czy powinienem zwiększyć rozmiar domyślnej puli wątków? Ale dokument mówi, że powinienem uzyskać najlepszą wydajność, gdy rozmiar basenu jest równy # rdzeniu.

Czy rozmiar puli wątków Netty (serwera WWW) ma wpływ na wydajność? Nie znalazłem żadnych informacji o jego wartości domyślnej. Ktoś wie, jak jest skonfigurowany?

Dziękujemy!

+0

Wygląda na to, że pytanie dotyczy skalowalności zamiast wydajności. Jeśli chodzi o wydajność, IMHO 230ms/Req też nie jest takie szybkie, więc sprawdziłbym również, co jest tego przyczyną. Czy masz jakąś wskazówkę, co zajmuje większość czasu, np. wywołania zaplecza, obliczenia specyficzne dla aplikacji lub renderowanie szablonu? – MartinGrotzke

+1

Upewnij się, że porównujesz grę w trybie PROD, uruchamiając 'play start'. Tryb DEV ma mnóstwo kosztów dla automatycznego przeładowania. –

Odpowiedz

6

Domyślna konfiguracja wątków Play jest przeznaczona dla aplikacji korzystających z asynchronicznych interfejsów API.

Jeśli wykonujesz wiele wywołań blokujących (zwykle "standardowe" wywołania bazy danych JDBC), będziesz musiał dostosować domyślny wątek ThreadPool lub wykonać wywołania DB w innym specjalnie skonfigurowanym wątku ThreadPool.

Aby zrozumieć wszystkie te mechanizmy, mogę polecić przeczytanie sekcji Thread Pools dokumentacji programu Play Framework. Zawiera bardzo przydatne informacje na ten temat.

0

-Xmx32000m na ​​przykład uruchamia maszynę JVM z 32 gb pamięci sterty.

-Xmx256m jest domyślnym trybem debugowania, więc można go zmienić, aby dopasować, jak bardzo ma się rozwijać w obszarze pamięci RAM serwera. W zależności od szybkości wejścia/wyjścia twojego komputera, cykle zbierania śmieci mogą wydawać się przerwami, jeśli jest dużo do wyczyszczenia, ale zwykle około 20 ms i nie są zauważalne w zależności od przeznaczenia aplikacji.

Powiązane problemy