Arkadiusz K. web
Temat: Symulowanie duzego ruchu
Witam,Jestem w trakcie testowania systemu korzystajacego z Amazon AWS ktory ma obsluzyc 1 godzinne wydarzenie marketingowe w necie o bardzo duzym ruchu (spodziewane ok 50tys uzytkownikow) i spotkalem sie z oporem ze strony narzedzi AB i SIEGE odczas symulacji ktore zwracaja bledy limitu plikow i limitu socketow podczas gdy webserwery nie wygladaja na specjalnie obciazone. Gdzie robie blad?
Konfiguracja:
1 x AWS Load balancer (stickiness disabled)
1 x AWS instance (db serwer)
serwer to CentOS: High-Memory Quadruple Extra Large Instance 68.4 GB of memory, 26 EC2 Compute Units (8 virtual cores with 3.25 EC2 Compute Units each), 1690 GB of local instance storage, 64-bit platform
3 x AWS instance (web serwer)
- kazdy serwer to CentOS: High-Memory Quadruple Extra Large Instance 68.4 GB of memory, 26 EC2 Compute Units (8 virtual cores with 3.25 EC2 Compute Units each), 1690 GB of local instance storage, 64-bit platform
- apache prefork, php5.3.3 modul, mysql5.1.47
Test:
Testowana jest prosta strona www, 1 strona ktore poprzez requesty ajaxowe bedzie odswiezac kontent via json z bazy, requesty sa krotkie ok 200-300 znakow w json z bazy, zapytania do bazy max 3 na jeden request wykonuja sie ponizej 0,002s, poprawne indeksy na myisam
> ab -c 1000 -n 20000 http://url.com
> siege -b -c 1000 -r 200
po wykonaniu powyzszych komend z c=1000 otrzymuje ok 3000request/s z failure=0, kazdy wzorst c wiekszy niz 1000 daje ponad 25% failures i ani ab ani siege nie moze zakonczyc poprawnie testowania, w obu przypadkach zwraca blad: ...: Too many open files
zwiekszylem limit plikow do 2048 z 1024 i tym razem wyrzuca blad ogolny ...: Socket error
Podsumowujac:
Jak zasymulowac tak duzy ruch na serwerze w celu oszacowania ile web serwerow musze podpisac pod load balancer dla danej strony www. W moim przypadku widze jak na dloni ze webserwery nie sa zbytnio obciazone, db server tez sie nudzi a ab i siege wyrzucaja bledy i bad requesty...
zrzut z ab z proba c=4000 na public url load balancera:
[root@ip ~]# ab -c 4000 -n 70000 http://url.com/news
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/
Benchmarking http://url.com.amazonaws.com (be patient)
Completed 7000 requests
Completed 14000 requests
Completed 21000 requests
Completed 28000 requests
Completed 35000 requests
Completed 42000 requests
Completed 49000 requests
Completed 56000 requests
Completed 63000 requests
Finished 70000 requests
Server Software:
Server Hostname: http://url.com.amazonaws.com
Server Port: 80
Document Path: /news
Document Length: 0 bytes
Concurrency Level: 4000
Time taken for tests: 56.43387 seconds
Complete requests: 70000
Failed requests: 56066
(Connect: 0, Length: 56066, Exceptions: 0)
Write errors: 0
Non-2xx responses: 12067
Total transferred: 847796346 bytes
HTML transferred: 832600357 bytes
Requests per second: 1249.03 [#/sec] (mean)
Time per request: 3202.479 [ms] (mean)
Time per request: 0.801 [ms] (mean, across all concurrent requests)
Transfer rate: 14772.95 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 749 2744.4 3 45026
Processing: 0 1649 3912.4 313 55346
Waiting: 0 999 3376.1 77 52709
Total: 1 2398 4944.9 406 55376
Percentage of the requests served within a certain time (ms)
50% 406
66% 1453
75% 3042
80% 3329
90% 6597
95% 10124
98% 21058
99% 26126
100% 55376 (longest request)
Z gory dziekuje za sugestie i wskazanie gdzie robie blad
pozdrawiam