Optymalizacja Sprawozdanie

Grupa ćwicz.

4

Grupa lab.

7

Zespół.

6

Data wykonania.

21.03.2014 r.

Data odbioru

Nr ćwicz./ wersja

6

Temat ćwiczenia.

Optymalizacja serwerów www

Imiona i nazwiska.

Konrad Rugała, Mariusz Równy, Krzysztof Sobieraj

Ocena i uwagi

Wstęp

Serwer www jest to oprogramowanie odpowiedzialne za obsługiwanie zapytań klienta. Odszukuje odpowiednie pliki bądź uruchamia skrypty i zwraca ich wyniki klientowi. Główne oprogramowanie do stawiania serwerów www to APACHE, LIGHTTPD, NCSA, CERN. Serwery te zazwyczaj pracują na maszynach z systemem operacyjnym na bazie UNIXa.

Najpopularniejszym oprogramowaniem serwerowym jest Apache, ze względu na swoją darmową licencję, która w połączeniu z darmowym systemem operacyjnym pozwala na uruchomienie własnego serwera bez jakichkolwiek kosztów. Apache wykorzystuje protokół http do udostępniania dokumentów, plików i informowania o wyborach klienta czy odpowiedziach serwera. Apache udostępnia kod źródłowy oraz cieszy się ostatnimi laty ogromną popularnością (według różnych źródeł około 50% z wszystkich wykorzystywanych serwerów) pośród zwykłych użytkowników i różnej wielkości przedsiębiorstw.

Apache posiada modułową budową oraz współpracą z wieloma językami programowania i bazami danych - m.in. PHP, MySQL itp. Pomimo wielu swoich niedoskonałości - np. podatność na ataki typu DoS - jest nieustannie rozwijany i wykorzystywany jako środowisko, na którym działa wiele popularnych stron i sklepów internetowych czy for dyskusyjnych. Kolejną, bardzo ważną zaletą jest jego przenośność. Jest dostępny dla systemów operacyjnych Windows, Linux i Mac OS. Wiele możliwości konfiguracyjnych, które on posiada, są dostępne w graficznym interfejsie użytkownika, który jest dostępny w nowszych wersjach programu.

Serwer www powinien:

- obsługiwać dużą ilość zadań jednocześnie

- pracować możliwe szybko nie powodując zbytnich obciążeń komputera, na którym jest uruchomiony

- monitorować użytkowników

- udostępniać różne rodzaje formatów

Do konfiguracji Apache możemy wykorzystać interfejs graficzny dostarczany z nowszymi wersjami bądź dokonując konfiguracji zmieniając intuicyjne parametry pliku /etc/apache2/server-tuning.conf

Oto fragment przykładowego zrzutu ekranu pliku konfiguracyjnego:

Do edycji pliku użyliśmy edytora tekstowego VIM, który jest darmowym oprogramowaniem (producent zachęca do donacji na cele charytatywne) bardzo przyjaznym użytkownikowi. Jak widać na załączonym obrazku posiada bardzo wiele opcji podświetleń, które ułatwiają pracę.

Program ApacheBench – jest to program typu Benchmark czyli oprogramowanie do testowania sprzętu i innych aplikacji. Jest dołączony do serwera Apache. Jego działanie polega na wysyłaniu dużych ilości zapytań i testowaniu sprawności serwera. Pozwala ocenić jak serwer radzi sobie z różnym ilościami zapytań, jak szybko na nie odpowiada czy ile hostów w ciągu jednej sekundy może obsłużyć. Dzięki temu oprogramowaniu możemy łatwo stwierdzić jakie obciążenie maksymalnie może znieść sprzęt (oraz połączenie sieciowe) na którym pracuje serwer. Dzięki temu wiemy w jakich sytuacjach nasz serwer będzie pracował wydajnie oraz czy konieczne są jakieś zmiany sprzętowe. Program ten odpalamy z wiersza poleceń (terminala) następującą komendą:

ab2 –n ilość_zapytań –c ilość_równoległych_zapytań adres_serwera

Przykładowe polecenia jakie wykorzystywaliśmy na ćwiczeniach:

Część praktyczna

Do wykonania ćwiczenia zostały użyte trzy komputery klasy PC w laboratorium komputerowym z system na licencji GNU GPL: OpenSUSE w wersji 11.

Oprogramowanie wykorzystane do wykonania ćwiczenia:

Dodatkowo użyty został program do robienia zrzutów ekranu dostarczony z system operacyjnym oraz program 7-zip do skompresowania zrzutów ekranów przed zapisem.

Zadania zostały wykonane na osobnych komputerach oraz rozdzielone w następujący sposób:

Krzysztof Sobieraj – testowanie parametrów KeepAliveTimeout, MaxSpareServers

Mariusz Równy – testowanie parametrów MinSpareServers, MaxSpareThreads

Konrad Rugała – testowanie parametrów MinSpareThreads, MaxRequestPerChild

Oprócz tego na każdym komputerze zostały przeprowadzone testy dla parametrów standardowych programu Apache. Parametry były testowane w następujący sposób:

Parametr/opcja - apache Wartość domyślna wartości zmienione
KeepAliveTimeout 15 5
MaxSpareServers 10 5
MinSpareServers 5 3
MaxSpareThreads 75 55
MinSpareThreads 25 15
MaxRequestsPerChild 10000 8000

Po każdej zmianie parametrów serwer był ponownie uruchamiany w celu zastosowania nowych parametrów.

Po ponownym uruchomieniu można było sprawdzić poprawność działania łącząc się w przeglądarce z adresem http://localhost jednak nie było to konieczne gdyż program ab2 nie był w stanie przeprowadzać testów jeżeli serwer nie był uruchomiony.

Zrzuty ekranów z przebiegu pracy:

Stanowisko pracy:

Kilka zrzutów ekranów z działania programu ab2.

Ze względu na fakt, że wszystkie zrzuty ekranów z pracy programu ab2 różnią się jedynie wynikami oraz, że informacje na temat parametrów jakie zostały zmienione znajdują się w nazwach plików nie umieszczamy wielu zrzutów ekranów. Wszystkie pliki graficzne w formatach .png zostały zapisane w serwisie chomikuj.pl i są dostępne pod linkiem http://chomikuj.pl/xkonradox/SIECI+KOMPUTEROWE który nie wygaśnie. Znajdują się tam również wszystkie dane zebrane tabelach programu Excel.

O to zebrane dane:

pomiary dla parametrów standardowych (Krzysiek) Time taken for tests [s] Requests per second [#/s] Time per request [ms] (mean) Time per request [ms] (mean, across all conc. Req)
requests concurent requests
1000 300 0,623 1605,52 186,856
3000 12,478 240,42 1247,815
6000 0,63 9530,53 31,478
10000 4,342 2302,95 130,268
13000 9,586 1356,2 221,206
16000 8,487 1885,34 159,122
20000 10,752 1860,03 161,287
pomiary dla parametrów standardowych (Marek) Time taken for tests [s] Requests per second [#/s] Time per request [ms] (mean) Time per request [ms] (mean, across all conc. Req)
requests concurent requests
1000 300 0,623 1604,68 186,954
3000 5,844 513,39 584,356
6000 6,704 895,01 335,192
10000 7,184 1391,97 215,521
13000 2,161 6016,9 49,86
16000 1,957 8175,87 36,693
20000 2,327 8595,75 34,901
pomiary dla parametrów standardowych (Konrad) Time taken for tests [s] Requests per second [#/s] Time per request [ms] (mean) Time per request [ms] (mean, across all conc. Req)
requests concurent requests
1000 300 0,622 1608,43 186,517
3000 1,437 2087,63 143,704
6000 15,395 389,75 769,728
10000 4,949 2020,55 148,475
13000 13,556 958,95 312,841
16000 3,435 4657,9 64,407
20000 7,089 2821,08 106,342
pomiary dla parametru KeepAliveTimeout = 5 Time taken for tests [s] Requests per second [#/s] Time per request [ms] (mean) Time per request [ms] (mean, across all conc. Req)
requests concurent requests
1000 300 0,626 1597,72 187,768
3000 6,659 450,5 665,923
6000 16,986 535,23 849,311
10000 14,12 708,2 423,61
13000 11,243 1156,26 259,456
16000 10,024 1596,24 187,941
20000 11,489 1740,73 172,342
pomiary dla parametru KeepAliveTimeout = 10 Time taken for tests [s] Requests per second [#/s] Time per request [ms] (mean) Time per request [ms] (mean, across all conc. Req)
requests concurent requests
1000 300 8,949 111,74 2684,783
3000 8,611 348,39 861,106
6000 8,209 730,88 410,466
10000 10,188 981,54 305,642
13000 8,398 1547,97 193,802
16000 6,554 2441,27 122,887
20000 4,965 4028,07 74,477
pomiary dla parametru KeepAliveTimeout = 20 Time taken for tests [s] Requests per second [#/s] Time per request [ms] (mean) Time per request [ms] (mean, across all conc. Req)
requests concurent requests
1000 300 8,159 122,56 2447,706
3000 10,011 299,66 1001,131
6000 11,684 513,53 584,189
10000 1,053 9493,66 31,6
13000 1,344 9675,24 31,007
16000 7,965 2008,88 149,337
20000 2,147 9314,89 32,206
pomiary dla parametru KeepAliveTimeout = 25 Time taken for tests [s] Requests per second [#/s] Time per request [ms] (mean) Time per request [ms] (mean, across all conc. Req)
requests concurent requests
1000 300 2,255 443,46 676,502
3000 21,943 136,72 2194,313
6000 7,712 777,97 385,618
10000 8,57 1166,93 257,085
13000 12,192 1066,27 281,355
16000 10,368 1543,17 194,405
20000 2,434 8217,37 36,508
pomiary dla parametru MaxSpareServers = 5 Time taken for tests [s] Requests per second [#/s] Time per request [ms] (mean) Time per request [ms] (mean, across all conc. Req)
requests concurent requests
1000 300 7,483 133,63 2244,964
3000 18,731 160,17 1873,05
6000 15,154 395,93 757,704
10000 3,959 2525,83 118,773
13000 17,013 764,1 392,618
16000 14,855 1077,05 278,539
20000 11,9 1680,72 178,495
pomiary dla parametru MaxSpareServers = 8 Time taken for tests [s] Requests per second [#/s] Time per request [ms] (mean) Time per request [ms] (mean, across all conc. Req)
requests concurent requests
1000 300 0,621 1609,46 186,398
3000 6,624 452,89 662,411
6000 17,721 350,45 856,038
10000 13,941 717,32 418,225
13000 10,845 1198,72 250,267
16000 9,689 1651,39 181,665
20000 7,851 2547,34 117,77
pomiary dla parametru MaxSpareServers = 15 Time taken for tests [s] Requests per second [#/s] Time per request [ms] (mean) Time per request [ms] (mean, across all conc. Req)
requests concurent requests
1000 300 18,156 55,08 5446,772
3000 4,867 616,33 486,749
6000 4,539 1321,87 226,951
10000 4,179 2392,97 125,367
13000 4,658 2790,86 107,494
16000 4,508 3549,47 84,52
20000 8,563 2335,51 128,451
pomiary dla parametru MaxSpareServers = 20 Time taken for tests [s] Requests per second [#/s] Time per request [ms] (mean) Time per request [ms] (mean, across all conc. Req)
requests concurent requests
1000 300 10,822 92,41 3246,538
3000 0,396 7568,23 39,639
6000 0,696 8616,1 34,819
10000 9,18 1089,31 275,405
13000 7,325 1774,79 169,034
16000 5,611 2851,31 105,215
20000 4,216 4743,45 63,245
pomiary dla parametru MaxSpareThreads = 55 Time taken for tests [s] Requests per second [#/s] Time per request [ms] (mean) Time per request [ms] (mean, across all conc. Req)
requests concurent requests
1000 300 20,133 49,67 6039,819
3000 19,293 155,49 1929,335
6000 18,367 326,67 918,346
10000 18,585 538,06 557,563
13000 11,572 1123,41 267,044
16000 2,149 7445,67 40,292
20000 9,483 2109,08 142,242
pomiary dla parametru MaxSpareThreads = 65 Time taken for tests [s] Requests per second [#/s] Time per request [ms] (mean) Time per request [ms] (mean, across all conc. Req)
requests concurent requests
1000 300 0,221 4515,28 66,441
3000 0,884 3393,34 88,409
6000 8,723 1146,41 261,687
10000 7,657 1697,84 176,695
13000 9,096 1758,92 170,559
16000 8,01 2496,84 120,152
20000 0,221 4515,28 66,441
pomiary dla parametru MaxSpareThreads = 85 Time taken for tests [s] Requests per second [#/s] Time per request [ms] (mean) Time per request [ms] (mean, across all conc. Req)
requests concurent requests
1000 300 7,859 127,25 2357,636
3000 6,579 456,02 657,873
6000 16,544 362,66 827,212
10000 13,616 734,41 408,49
13000 7,281 1785,46 168,024
16000 8,549 1871,64 160,287
20000 8,003 2499 120,048
pomiary dla parametru MaxSpareThreads = 95 Time taken for tests [s] Requests per second [#/s] Time per request [ms] (mean) Time per request [ms] (mean, across all conc. Req)
requests concurent requests
1000 300 20,107 49,73 6032,163
3000 6,008 499,36 600,772
6000 17,178 349,28 858,905
10000 14,961 668,41 448,825
13000 12,526 1037,84 289,061
16000 11,826 1353 221,729
20000 2,802 7138,64 42,025
pomiary dla parametru MinSpareServers = 3 Time taken for tests [s] Requests per second [#/s] Time per request [ms] (mean) Time per request [ms] (mean, across all conc. Req)
requests concurent requests
1000 300 18,166 55,05 5449,704
3000 15,247 196,76 1524,738
6000 4,265 1406,74 213,258
10000 14,167 705,89 424,998
13000 1,673 7772,19 38,599
16000 1,734 9227,03 32,513
20000 2,328 8590,43 34,923
pomiary dla parametru MinSpareServers = 4 Time taken for tests [s] Requests per second [#/s] Time per request [ms] (mean) Time per request [ms] (mean, across all conc. Req)
requests concurent requests
1000 300 9,389 106,51 2816,56
3000 14,736 203,58 1473,591
6000 0,636 9433,77 31,801
10000 1,188 8417,54 35,64
13000 2,186 5947,55 50,441
16000 7,887 2028,64 147,882
20000 7,117 2810,09 106,758
pomiary dla parametru MinSpareServers = 6 Time taken for tests [s] Requests per second [#/s] Time per request [ms] (mean) Time per request [ms] (mean, across all conc. Req)
requests concurent requests
1000 300 6,718 148,86 2015,315
3000 17,568 170,77 1756,776
6000 15,25 393,45 762,495
10000 4,268 2343,09 128,036
13000 14,185 916,46 327,345
16000 2,082 7685,42 39,035
20000 2,285 8753,48 34,272
pomiary dla parametru MinSpareServers = 7 Time taken for tests [s] Requests per second [#/s] Time per request [ms] (mean) Time per request [ms] (mean, across all conc. Req)
requests concurent requests
1000 300 12,447 80,34 3734,137
3000 0,413 7269,89 41,266
6000 0,718 8361,58 35,878
10000 8,685 1151,4 260,553
13000 6,982 1861,87 161,129
16000 5,538 2888,9 103,846
20000 3,2 6250,57 47,996
pomiary dla parametru MaxReqPerChild = 8000 Time taken for tests [s] Requests per second [#/s] Time per request [ms] (mean) Time per request [ms] (mean, across all conc. Req)
requests concurent requests
1000 300 14,693 68,06 4407,792
3000 4,131 726,17 413,127
6000 13,702 437,88 685,124
10000 1,159 8624,65 34,784
13000 12,023 1081,29 277,446
16000 10,215 1566,37 191,256
20000 8,392 2383,16 125,883
pomiary dla parametru MaxReqPerChild = 9000 Time taken for tests [s] Requests per second [#/s] Time per request [ms] (mean) Time per request [ms] (mean, across all conc. Req)
requests concurent requests
1000 300 0,623 1603,87 187,048
3000 6,875 436,37 687,487
6000 6,353 944,45 317,644
10000 6,048 1653,32 181,453
13000 5,813 2236,25 134,153
16000 5,569 2873,3 104,41
20000 5,268 3796,42 79,022
pomiary dla parametru MaxReqPerChild = 11000 Time taken for tests [s] Requests per second [#/s] Time per request [ms] (mean) Time per request [ms] (mean, across all conc. Req)
requests concurent requests
1000 300 20,196 49,52 6058,733
3000 6,089 492,72 608,864
6000 5,905 1016,12 295,24
10000 5,268 1898,37 158,03
13000 14,673 885,96 338,615
16000 3,078 5198,75 57,706
20000 11,549 1731,86 173,224
pomiary dla parametru MaxReqPerChild = 12000 Time taken for tests [s] Requests per second [#/s] Time per request [ms] (mean) Time per request [ms] (mean, across all conc. Req)
requests concurent requests
1000 300 10,261 97,45 3078,405
3000 17,163 174,79 1716,342
6000 16,336 367,3 816,779
10000 14,894 671,39 446,832
13000 1,375 9454,78 31,73
16000 11,623 1376,54 217,938
20000 9,466 2112,84 141,989
pomiary dla parametru MinSpareThreads = 15 Time taken for tests [s] Requests per second [#/s] Time per request [ms] (mean) Time per request [ms] (mean, across all conc. Req)
requests concurent requests
1000 300 16,929 57,07 5078,576
3000 3,802 789,03 380,212
6000 12,599 476,22 629,967
10000 1,128 8867,09 33,833
13000 1,432 9075,25 33,057
16000 4,612 3469,28 86,473
20000 4,393 4552,7 65,895
pomiary dla parametru MinSpareThreads = 20 Time taken for tests [s] Requests per second [#/s] Time per request [ms] (mean) Time per request [ms] (mean, across all conc. Req)
requests concurent requests
1000 300 22,725 44 6817,434
3000 0,627 4783,77 62,712
6000 1,994 3008,58 99,715
10000 19,896 502,61 596,886
13000 6,614 1965,65 152,621
16000 6,13 2610,29 114,93
20000 7,269 4529,335 198,65
pomiary dla parametru MinSpareThreads = 30 Time taken for tests [s] Requests per second [#/s] Time per request [ms] (mean) Time per request [ms] (mean, across all conc. Req)
requests concurent requests
1000 300 15,821 63,24 4746,226
3000 0,421 7121,36 42,127
6000 0,74 8106,98 37,005
10000 12,193 820,17 365,78
13000 11,275 921,45 349,27
16000 10,038 1295,06 231,649
20000 8,08 2475,25 121,2
pomiary dla parametru MinSpareThreads = 35 Time taken for tests [s] Requests per second [#/s] Time per request [ms] (mean) Time per request [ms] (mean, across all conc. Req)
requests concurent requests
1000 300 19,198 52,09 5759,338
3000 7,023 427,16 702,31
6000 7,283 823,83 364,153
10000 7,591 1317,41 227,719
13000 8,784 147,9 202,717
16000 8,723 1834,26 163,554
20000 8,12 2462,93 121,806

Opracowanie wyników

Jak widać na wykresie parametry dają podobne skutki dla dużej ilości zapytań. Ciężko stwierdzić, która wartość jest optymalna. Wartością, którą wybralibyśmy jest wartość 20. Dla zapytań rzędu kilkunastu tysięcy ma bardzo dobre wyniki.

Podczas testów parametru MaxSpareServers naszą szczególną uwagę zwróciła wartość 20, która utrzymywała się poniżej jednej milisekundy. Wszystkie parametry nie wiele różniły się od siebie.

Dane zebrane podczas testów parametru MinSpareServers nie pozwalają na wyciągnięcie logicznych wniosków co do znaczenia tego parametru. Logicze wydaje się zwiększenie tego parametru jeżeli spodziewamy się dużej ilości zapytań

Jeżeli dobrze się przyjżeć danym na wykresie bądź przeglądając dane zebrane w tabelach zmniejszenie parametru MaxSpareThreads może wpłynąć korzystnie na działanie serwera przy większej liczbie zapytań. Brak bezczynnych procesów na pewno odciąży sprzęt komputerowy.

Podobnie jak w przypadku MinSpareServers z wykresu i danych ciężko przeprowadzić wnioskowanie statystyczne. Znając znaczenie parametrów można łatwo się domyślić, że zwiększenie tego parametru wpłynie korzystnie na działanie naszego serwera jeżeli będziemy otrzymywać dużą liczbę zapytań.

Przy testach maksymalnej liczby MaxRequestPerChild zauważamy, że zwiększenie tego parametru polepsza wydajność przy dużej liczbie zapytań. Natomiast zmniejszenie tej wartości poprawi działanie przy małej liczbie zapytań.

Legenda:

KeepAliveTimeout – informuje ile sekund Apache ma czekać na kolejne zapytanie przed przerwaniem połączenia

MaxSpareServers/MinSpareServers – określa liczbę pożądanych procesów zapasowych (są to procesy bezczynne) przekroczenie maksimum skutkuje zabiciem nadmiaru procesów. Zejście poniżej minimalnej liczby powoduje utworzenie nowych procesów.

MaxSpareThreads/MinSpareThreads – dotyczy wątków. Działanie jest podobne do opisanego powyżej.

MaxRequestPerChild – określa maksymalną liczbę żądań jaką może obsługiwać podproces serwera.

Wnioski

Ćwiczenie wymagało od nas przeprowadzenia wielu testów. Niestety czas przeznaczony na zajęcia nie wystarczył na sprawdzenie danych optymalnych. Po przeprowadzonych testach sądzimy jedna, że nie istnieją uniwersalne wartości optymalne.

Optymalizacja serwera www jest zadaniem trudnym. Wymaga znajomości oprogramowania wykorzystywanego do postawienia serwera oraz wielu zmiennych czynników, które wpłyną na działanie serwera. Sądzimy, że optymalizacja nie jest czynnością, a procesem. Wiele serwerów i serwisów Internetowych rozwija się, bądź ulega degradacji. Jeżeli rozpoczynamy pracę z serwerem, łączy się z nami mało klientów, warto zredukować liczbę bezczynnych procesów i wątków oraz maksymalną liczbę zapytań obsługiwanych przez podprocesy by nasz serwer płynnie działał. Wraz z rozwojem naszego serwera i wzrostem liczby zapytań, które do niego przychodzą warto zwiększać te parametry oraz zmniejszyć czas oczekiwania na kolej zapytanie by osoby łączące się z naszym serwisem były zadowolone z dostarczanych usług.

Przeglądając zgromadzone dane łatwo jest również zauważyć liczne nielogiczne wartości jakie dawały przeprowadzone testy. Widać szczególnie, że pierwszy test po restarcie serwera dawał zazwyczaj bardzo długi czas obsługi zapytań. Sądzimy, że nie jest to spowodowane przez parametry, które zmienialiśmy, a przez pracę komputera, która była obciążona świeżo uruchomionym serwerem oraz innym oprogramowaniem wykorzystywanym do wykonania ćwiczenia.

To zadanie było bardzo praktyczne i prawdopodobnie wiedzę, zdobytą podczas jego wykonywania wykorzystamy w przyszłości stawiając własny serwer www lub w przyszłej karierze zawodowej.


Wyszukiwarka

Podobne podstrony:
sprawozdanie optymalizacja
8Oznaczanie wilgotności optymalnejKONSPEKT, Gruntoznawstwo, sprawozdania
SPRAWOZDANIE - Wilgotność optymalna, Mechanika Gruntów
sprawozdanie-MaciejPawnukTomaszImiołek, Automatyka i Robotyka, Semestr III, Metody Obliczeniowe Opty
Sprawozdanie optymalizacja nr2, Uczelnia, Optymalizacja
sprawozdanie3 mo ok, Studia, Studia sem VI, Metody optymalizacji
Wilgotność optymalna, Politechnika Gdańska Budownictwo, Sprawozdania MG sem 3
Optymalizacja nieliniowa bez ograniczeń sprawozdanie
Optymalizacja LP
Zasady ergonomii w optymalizacji czynności roboczych
2 definicje i sprawozdawczośćid 19489 ppt
optymalizacja fak
PROCES PLANOWANIA BADANIA SPRAWOZDAN FINANSOWYC H
W 11 Sprawozdania
Podstawy Optymalizacji, simplex
Wymogi, cechy i zadania sprawozdawczośći finansowej

więcej podobnych podstron