Grupa ćwicz.
2
Grupa lab.
A
Zespół.
3
Data wykonania.
27.05.2011
Data odbioru
Nr ćwicz./
wersja
7/1
Temat ćwiczenia.
Optymalizacja serwerów.
Imiona i nazwiska.
Mariusz Krzyżak, Mateusz Gurda
Ocena i uwagi
Część praktyczna
I. Sprzęt i oprogramowanie:
Sprzęt:
2 komputery PC w laboratorium
Procesor
Athlon, x86-64
SO
Linux open Suse 10.2
Użytkownik
student 20
Oprogramowanie:
-sewer Apache
-program ab2
Pliki konfiguracyjne serwera Apache znajdują się w:
/etc/apache2/httpd.conf oraz /etc/apache2/serwer-tuning.conf
Kontroli serwera dokonujemy w następujący sposób:
#/etc/init.d/apache2 status – sprawdzenie stanu
#/etc/init.d/apache2 start – uruchomienie serwera
#/etc/init.d/apache2 stop – zatrzymanie serwera
#/etc/init.d/apache2 restart – restart serwera
Sprawdzanie serwera przeprowadzamy po wpisaniu
- uruchomi się strona postawiona na
serwerze(jeśli istnieje, jeśli nie informacja o działaniu serwera).
AB2 jest programem dostarczonym razem z serwerem Apache. Program symuluje dużą liczbę jednoczesnych
zapytao a następnie mierzy liczbę zapytao obsługiwanych przez serwer w czasie 1s oraz czas potrzebny
serwerowi do ich obsługi.
Przykładowa linia komend: ”# ab2 –n 1000 –c 20
. Poniżej przykładwy screen z
testów ab2.
Przykładowe zrzuty ekranu powyżej przedstawia pliki /etc/apache2/httpd.conf oraz
/etc/apache2/serwer-tuning.conf wykorzystany podczas testów do konfiguracji.
II. Schemat ćwiczenia:
1.Do testów został wykorzystujemy program ab2.
2.Sprawdzanie stanu Apache (w przeglądarce) – jeśli nie działa – uruchomid serwer.
3.W pliku konfiguracyjnym /etc/apache2/Server-tuning.conf ustawid wartości domyślne serwera (zamieszczone
w tabeli poniżej).
Parametr/opcja – Apache
Wartośd domyślna
Wartośd/opcja zmieniona
Keep Alive
On
-
KeepAliveTimeout
15
9/11/13/17/19
MaxSpareServers
10
-
MinSpareServers
5
2/4/6/8/10
MaxSpareThreads
75
-
MinSpareThreads
25
20/21/22/26/28
MaxRequestPerChild
10000
6000/7000/9000/11000/12000
4. Wykonujemy reset serwera.
5. Programem ab2 przeprowadzamy testy dla wartości domyślnej. Mierzymy liczbę zapytao obsługiwanych przez
serwer w czasie 1s, oraz czas potrzebny serwerowi do ich obsługi. Testy przeprowadzamy dla 20 zapytao
jednoczesnych oraz następujących ilościach faz zapytao: 1000, 2000, 5000, 10000, 15000, 18000, 20000.
6. Dla każdego z 6 parametrów zawartych w tabeli powyżej (oprócz Keep Alive) wykonujemy testy zmieniając (w
pliku konfiguracyjnym) wartości parametrów domyślnych do około 60% przy domyślnie ustawionych
pozostałych parametrach dla ilości zapytao z punktu 5. Dla danego parametru przeprowadzamy testy
zwiększając jego domyślną wartośd, a w kolejnym teście zmniejszając jego wartośd. Po każdej zmianie
parametrów pliku konfiguracyjnego zapisujemy go i dokonujemy restartu serwera. Wyniki notujemy na
kartce(dołączona na koocu sprawozdania).
III. Wyniki
.
Parametry testów serwera Apache przed optymalizacją (default)
Ilośd faz zapytao
Ilośd zapytao
jednoczesnych (w
fazie)
Czas potrzebny na
test[s]
Ilośd zapytao na
sekundę *req/s+
Czas potrzebny na
obsługę zapytania
[ms]
1000
20
0,158
6319,39
3,165/0,158
2000
20
0,255
7830,18
2.554/0.128
5000
20
0,497
10061,17
1,988/0,099
10000
20
1,064
9397,54
2,128/0,106
12000
20
1.208
9937,08
2.013/0.101
15000
20
2,803
5352,20
3,737/0.187
20000
20
2,930
6826,58
2,930/0,146
Parametry testów serwera Apache po optymalizacji
:
TEST 1
MinSpareThreads 20 przy domyślnych pozostałych parametrach
Ilośd faz zapytao
Ilośd zapytao
jednoczesnych (w
fazie)
Czas potrzebny na
test[s]
Ilośd zapytao na
sekundę *req/s+
Czas potrzebny na
obsługę zapytania
[ms]
1000
20
0,117
8572,51
2,333/0,117
2000
20
0,227
8793,30
2,274/0,114
5000
20
0,414
12082,61
1,665/0,083
10000
20
1,023
9772,84
2,046/0,102
12000
20
1,096
10944,51
1,827/0,091
15000
20
1,300
11537,96
1,733/0,087
20000
20
2,158
9265,81
2,158/0,108
MaxRequestPerChild 6000 przy domyślnych pozostałych parametrach
Ilośd faz zapytao
Ilośd zapytao
jednoczesnych (w
fazie)
Czas potrzebny na
test[s]
Ilośd zapytao na
sekundę *req/s+
Czas potrzebny na
obsługę zapytania
[ms]
1000
20
0,134
7466,98
2,678/0,134
2000
20
0,229
8750,02
2,286/0,114
5000
20
0,440
11375,32
1,758/0,088
10000
20
0,884
11314,59
1,768/0,088
12000
20
0,917
13089,15
1,528/0,076
15000
20
1,324
11328,18
1,766/0,088
20000
20
2,906
6881,66
2,906/0,145
KeepAliveTimeOut 9 przy domyślnych pozostałych parametrach
Ilośd faz zapytao
Ilośd zapytao
jednoczesnych (w
fazie)
Czas potrzebny na
test[s]
Ilośd zapytao na
sekundę *req/s+
Czas potrzebny na
obsługę zapytania
[ms]
1000
20
0,140
7165,02
2,791/0,140
2000
20
0,290
6896,88
2,900/0,145
5000
20
0,566
8835,90
2,263/0,113
10000
20
0,803
12452,21
1,606/0,080
12000
20
1,223
9813,34
2,038/0,102
15000
20
1,538
9753,40
2,051/0,103
20000
20
3,875
5161,90
3,875/0,194
MinSpareServers 2 przy domyślnych pozostałych parametrach
Ilośd faz zapytao
Ilośd zapytao
jednoczesnych (w
fazie)
Czas potrzebny na
test[s]
Ilośd zapytao na
sekundę *req/s+
Czas potrzebny na
obsługę zapytania
[ms]
1000
20
0,141
7080,55
2,825/0,141
2000
20
0,205
9774,31
2,046/0,102
5000
20
0,554
9028,82
2,215/0,111
10000
20
1,200
8330,85
2,401/0,120
12000
20
1,313
9138,05
2,189,109
15000
20
1,958
7660,65
2,611/0,131
20000
20
3,143
6363,25
3,143/0,157
TEST 2
MinSpareThreads 21 przy domyślnie ustawionych innych parametrach
Ilośd faz zapytao
Ilośd zapytao
jednoczesnych (w
fazie)
Czas potrzebny na
test[s]
Ilośd zapytao na
sekundę *req/s+
Czas potrzebny na
obsługę zapytania
[ms]
1000
20
0,130
7689,65
2,601/0,130
2000
20
0,266
7525,79
2,658/0,133
5000
20
0,729
6861,78
2,915/0,146
10000
20
1,194
8373,63
2,388/0,119
12000
20
1,512
7934,15
2,521/0,126
15000
20
1,594
9410,44
2,125/0,106
20000
20
2,182
9166,25
2,182/0,109
MaxRequestPerChild 7000 przy domyślnych innych ustawieniach
Ilośd faz zapytao
Ilośd zapytao
jednoczesnych (w
fazie)
Czas potrzebny na
test[s]
Ilośd zapytao na
sekundę *req/s+
Czas potrzebny na
obsługę zapytania
[ms]
1000
20
0,111
8989,41
2,225/0,111
2000
20
0,259
7710,04
2,594/0,130
5000
20
0,503
9945,52
2,011/0,101
10000
20
0,823
12143,79
1,647/0,082
12000
20
1,181
10156,66
1,969/0,098
15000
20
1,345
10669,47
1,875/0,094
20000
20
1,599
12511,73
1,599/0,080
KeepAliveTimeOut 11 przy domyślnych innych ustawieniach
Ilośd faz zapytao
Ilośd zapytao
jednoczesnych (w
fazie)
Czas potrzebny na
test[s]
Ilośd zapytao na
sekundę *req/s+
Czas potrzebny na
obsługę zapytania
[ms]
1000
20
0,153
6531,34
3,062/0,153
2000
20
0,235
8510,42
2,350/0,118
5000
20
0,458
10922,16
1,831/0,092
10000
20
0,879
11376,81
1,758/0,088
12000
20
1,172
10242,18
1,953/0,098
15000
20
1,703
8810,24
2,270/0,114
20000
20
3,864
5176,64
3,864/0,193
MinSpareServers 4 przy domyślnych innych ustawieniach
Ilośd faz zapytao
Ilośd zapytao
jednoczesnych (w
fazie)
Czas potrzebny na
test[s]
Ilośd zapytao na
sekundę *req/s+
Czas potrzebny na
obsługę zapytania
[ms]
1000
20
0,113
8879,73
2,252/0,113
2000
20
0,210
9542,71
2,096/0,0105
5000
20
0,753
6636,89
3,013/0,151
10000
20
0,992
10081,72
1,984/0,099
12000
20
2,131
5629,89
3,552/0,178
15000
20
2,326
6450,04
3,101/0,155
20000
20
3,196
6257,34
3,196/0,160
TEST 3
MinSpareThreads 22 przy domyślnie ustawionych innych parametrach
Ilośd faz zapytao
Ilośd zapytao
jednoczesnych (w
fazie)
Czas potrzebny na
test[s]
Ilośd zapytao na
sekundę *req/s+
Czas potrzebny na
obsługę zapytania
[ms]
1000
20
0,148
6739,23
2,968/0,148
2000
20
0,230
8698,79
2,299/0,115
5000
20
0,531
9409,20
2,126/0,106
10000
20
0,763
13108,84
1,526/0,076
12000
20
1,341
8950,83
2,234/0,112
15000
20
1,632
9192,91
2,176/0,109
20000
20
3,088
6476,46
3,088/0,154
MaxRequestPerChild 9000 przy domyślnych innych ustawieniach
Ilośd faz zapytao
Ilośd zapytao
jednoczesnych (w
fazie)
Czas potrzebny na
test[s]
Ilośd zapytao na
sekundę *req/s+
Czas potrzebny na
obsługę zapytania
[ms]
1000
20
0,096
10365,49
1,929/0,096
2000
20
0,182
10993,24
1,819/0,091
5000
20
0,507
9857,46
2,029/0,101
10000
20
0,919
10879,78
1,838/0,092
12000
20
1,032
11631,00
1,720/0,086
15000
20
1,269
11817,70
1,692/0,085
20000
20
1,922
10404,50
1,922/0,096
KeepAliveTimeOut 13 przy domyślnych innych ustawieniach
Ilośd faz zapytao
Ilośd zapytao
jednoczesnych (w
fazie)
Czas potrzebny na
test[s]
Ilośd zapytao na
sekundę *req/s+
Czas potrzebny na
obsługę zapytania
[ms]
1000
20
0,106
9440,29
2,119/0,106
2000
20
0,236
8457,84
2,365/0,118
5000
20
0,607
8242,39
2,462/0,121
10000
20
0,983
10168,06
1,967/0,098
12000
20
1,203
9972,20
2,006/0,100
15000
20
1,820
8243,75
2,426/0,121
20000
20
4,007
4990,73
4,007/0,200
MinSpareServers 6 przy domyślnych innych ustawieniach
Ilośd faz zapytao
Ilośd zapytao
jednoczesnych (w
fazie)
Czas potrzebny na
test[s]
Ilośd zapytao na
sekundę *req/s+
Czas potrzebny na
obsługę zapytania
[ms]
1000
20
0,113
8845,25
2,261/0,113
2000
20
0,296
6750,01
2,963/0,148
5000
20
0,535
9353,89
2,138/0,107
10000
20
1,350
7409,80
2,699/0,135
12000
20
1,248
9614,79
2,080/0,104
15000
20
2,530
5927,24
3,374/0,169
20000
20
2,964
6747,80
2,964/0,148
TEST 4
MinSpareThreads 26 przy domyślnie ustawionych innych parametrach
Ilośd faz zapytao
Ilośd zapytao
jednoczesnych (w
fazie)
Czas potrzebny na
test[s]
Ilośd zapytao na
sekundę *req/s+
Czas potrzebny na
obsługę zapytania
[ms]
1000
20
0,107
9304,06
2,150/0,107
2000
20
0,280
7140,79
2,801/0,140
5000
20
0,573
8732,77
2,290/0,115
10000
20
0,986
10140,74
1,972/0,099
12000
20
1,127
10646,05
1,879/0,094
15000
20
1,233
12162,51
1,644/0,082
20000
20
1,980
10099,96
1,980/0,099
MaxRequestPerChild 11000 przy domyślnych innych ustawieniach
Ilośd faz zapytao
Ilośd zapytao
jednoczesnych (w
fazie)
Czas potrzebny na
test[s]
Ilośd zapytao na
sekundę *req/s+
Czas potrzebny na
obsługę zapytania
[ms]
1000
20
0,177
5635,33
3,549/0,177
2000
20
0,218
9189,53
2,176/0,109
5000
20
0,500
10004,78
1,999/0,100
10000
20
0,939
10651,51
1,878/0,094
12000
20
1,120
10711,35
1,867/0,093
15000
20
1,291
11617,79
1,721/0,086
20000
20
1,423
11620,10
1,752/0,085
KeepAliveTimeOut 17 przy domyślnych innych ustawieniach
Ilośd faz zapytao
Ilośd zapytao
jednoczesnych (w
fazie)
Czas potrzebny na
test[s]
Ilośd zapytao na
sekundę *req/s+
Czas potrzebny na
obsługę zapytania
[ms]
1000
20
0,133
7522,81
2,659/0,133
2000
20
0,295
6770,82
2,954/0,148
5000
20
0,628
7956,34
2,514/0,126
10000
20
1,021
9798,95
2,041/0,102
12000
20
1,402
8561,47
2,336/0,117
15000
20
2,838
5285,35
3,784/0,189
20000
20
2,914
6863,57
2,914/0,146
MinSpareServers 8 przy domyślnych innych ustawieniach
Ilośd faz zapytao
Ilośd zapytao
jednoczesnych (w
fazie)
Czas potrzebny na
test[s]
Ilośd zapytao na
sekundę *req/s+
Czas potrzebny na
obsługę zapytania
[ms]
1000
20
0,167
6003,88
3,331/0,167
2000
20
0,217
9228,24
2,167/0,108
5000
20
0,506
9872,78
2,026/0,101
10000
20
1,282
7801,40
2,564/0,128
12000
20
1,901
6311,89
3,169/0,158
15000
20
1,919
7816,22
2,559/0,128
20000
20
4,557
4389,31
4,557/0,228
TEST 5
MinSpareThreads 28 przy domyślnie ustawionych innych parametrach
Ilośd faz zapytao
Ilośd zapytao
jednoczesnych (w
fazie)
Czas potrzebny na
test[s]
Ilośd zapytao na
sekundę *req/s+
Czas potrzebny na
obsługę zapytania
[ms]
1000
20
0,111
8989,01
2,225/0,111
2000
20
0,214
9338,46
2,142/0,107
5000
20
0,502
9957,52
2,009/0,100
10000
20
0,870
11494,97
1,740/0,087
12000
20
1,163
10320,13
1,938/0,097
15000
20
2,120
7075,88
2,827/0,141
20000
20
3,078
6498,72
3,078/0,154
MaxRequestPerChild 12000 przy domyślnych innych ustawieniach
Ilośd faz zapytao
Ilośd zapytao
jednoczesnych (w
fazie)
Czas potrzebny na
test[s]
Ilośd zapytao na
sekundę *req/s+
Czas potrzebny na
obsługę zapytania
[ms]
1000
20
0,128
7802,44
2,563/0,128
2000
20
0,318
6353,69
3,146/0,157
5000
20
0,781
6400,48
3,125/0,156
10000
20
1,122
8910,03
2,245/0,112
12000
20
1,251
9595,98
2,084/0,104
15000
20
1,406
10669,47
1,875/0,094
20000
20
1,928
10372,59
1,928/0,096
KeepAliveTimeOut 19 przy domyślnych innych ustawieniach
Ilośd faz zapytao
Ilośd zapytao
jednoczesnych (w
fazie)
Czas potrzebny na
test[s]
Ilośd zapytao na
sekundę *req/s+
Czas potrzebny na
obsługę zapytania
[ms]
1000
20
0,198
9830,23
2,035/0,102
2000
20
0,201
9965,07
2,007/0,100
5000
20
0,505
9910,59
2,018/0,101
10000
20
0,921
10853,23
1,843/0,092
12000
20
1,082
11089,26
1,804/0,090
15000
20
1,443
10393,25
1,924/0,096
20000
20
3,075
6503,10
3,075/0,154
MinSpareServers 10 przy domyślnych innych ustawieniach
Ilośd faz zapytao
Ilośd zapytao
jednoczesnych (w
fazie)
Czas potrzebny na
test[s]
Ilośd zapytao na
sekundę *req/s+
Czas potrzebny na
obsługę zapytania
[ms]
1000
20
0,168
5945,41
3,3642/0,168
2000
20
0,323
6198,72
3,226/0,161
5000
20
0,879
5690,27
3,515/0,176
10000
20
1,934
5170,40
3,868/0,193
12000
20
2,390
5020,91
3,983/0,199
15000
20
3,137
4782,21
4,182/0,209
20000
20
3,913
5111,20
3,913/0,196
DANE UZYSKANE Z LABORATORIÓW ZOSTAŁY ZAMIESZCZONE NA STRONIE:
http://www.metal.agh.edu.pl/~mkrzyzak/Optymalizacja/
IV. Opracowanie wyników
0
0,5
1
1,5
2
2,5
3
3,5
1000
2000
5000
10000
12000
15000
20000
Czas
p
o
tr
ze
b
n
y
n
a t
e
st
[s]
Ilosc faz zapytan
default
0
2000
4000
6000
8000
10000
12000
1000
2000
5000
10000
12000
15000
20000
Il
o
ść
zap
ytao
n
a se
ku
n
d
ę
[r
e
q
/s]
Ilosc faz zapytan
default
MinSpareTreads
0
0,5
1
1,5
2
2,5
3
3,5
1000
2000
5000
10000
12000
15000
20000
Czas
p
o
tr
ze
b
n
y
n
a t
e
st
[s]
Ilosc faz zapytan
wartosc parametru: 20
wartosc parametru: 21
wartosc parametru: 22
wartosc parametru: 26
wartosc parametru: 28
default
0
2000
4000
6000
8000
10000
12000
14000
1000
2000
5000
10000
12000
15000
20000
Il
o
ść
zap
ytao
n
a se
ku
n
d
ę
[r
e
q
/s]
Ilosc faz zapytan
wartosc parametru: 20
wartosc parametru: 21
wartosc parametru: 22
wartosc parametru: 26
wartosc parametru: 28
default
MaxRequestperChild
0
0,5
1
1,5
2
2,5
3
3,5
1000
2000
5000
10000
12000
15000
20000
Czas
p
o
tr
ze
b
n
y
n
a t
e
st
[s]
Ilosc faz zapytan
wartosc parametru 6000
wartosc parametru 7000
wartosc parametru 9000
wartosc parametru 11000
wartosc parametru 12000
default
0
2000
4000
6000
8000
10000
12000
14000
1000
2000
5000
10000 12000 15000 20000
Il
o
ść
zap
ytao
n
a se
ku
n
d
ę
[r
e
q
/s]
Ilosc faz zapytan
wartosc parametru 6000
wartosc parametru 7000
wartosc parametru 9000
wartosc parametru 11000
wartosc parametru 12000
default
KeepAliveTimeOut
0
0,5
1
1,5
2
2,5
3
3,5
4
4,5
1000
2000
5000
10000
12000
15000
20000
Czas
p
o
tr
ze
b
n
y
n
a t
e
st
[s]
Ilosc faz zapytan
wartosc parametru 9
wartosc parametru 11
wartosc parametru 13
wartosc parametru 17
wartosc parametru 19
default
0
2000
4000
6000
8000
10000
12000
14000
1000
2000
5000
10000
12000
15000
20000
Il
o
ść
zap
ytao
n
a se
ku
n
d
ę
[r
e
q
/s]
Ilosc faz zapytan
wartosc parametru 9
wartosc parametru 11
wartosc parametru 13
wartosc parametru 17
wartosc parametru 19
default
MinSpareServer
0
0,5
1
1,5
2
2,5
3
3,5
4
4,5
5
1000
2000
5000
10000
12000
15000
20000
C
za
s
p
o
tr
ze
b
n
y
n
a
te
st
[s
]
Ilosc faz zapytan
wartosc parametru 2
wartosc parametru 4
wartosc parametru 6
wartosc parametru 8
wartosc parametru 10
default
0
2000
4000
6000
8000
10000
12000
1000
2000
5000
10000
12000
15000
20000
Il
o
ść
zap
ytao
n
a se
ku
n
d
ę
[r
e
q
/s]
Ilosc faz zapytan
wartosc parametru 2
wartosc parametru 4
wartosc parametru 6
wartosc parametru 8
wartosc parametru 10
default
V. Wnioski
Na podstawie zgromadzonych danych stworzono wykresy, które przedstawiają jaki wpływ ma
zmiana parametrów serwera na jego optymalizację.
Wykresy przedstawiające czas potrzebny na test w zależności od liczby faz zapytao dla konkretnych
parametrów serwera są funkcjami rosnącymi.
Interesującą rzeczą są różnice przy wyższych wartościach ilości faz zapytao, początkowo funkcje
zmierzają stosunkowo blisko siebie, natomiast od około 12000 faz zanotowaliśmy różne czasy testów.
Według nas wykresy ilości zapytao na sekundę naszym zdaniem pozwalają stwierdzid, które z
parametrów mają wpływ na optymalizację.
W większości przypadków zmiany parametrów domyślnych spowodowały poprawę działania serwera.
Według nas najlepiej na nie wpływały zmiany „MaxRequestPerChild”, „MinSpareServers” oraz
„MinSpareThreads”.
Po zwiększeniu „MaxRequestPerChild” zauważyliśmy, dużą liczbę zapytao przy wysokiej liczbie faz
zapytao co może mied zastosowane dla serwerów bardziej obciążonych.
Dla serwerów mniej obciążonych proponujemy zmniejszenie tego parametru.
„MaxRequestPerChild” określa maksymalną liczbę niewykorzystanych wątków przetwarzania żądania
przechowywanych w pamięci.
Domyślne wartości dla tego parametru dały gorsze wyniki.
Dla parametru „MinSpareThreads” zwiększenie wartości od wartości domyślnej daje nieco lepsze
wyniki dla całego zakresu badao.
W przypadku pozostałych trzech parametrów „MaxSpareServer”, „KeepTimeAlive” oraz
„MinSpareServer” pozostanie przy domyślnej wartości zapewnia dośd dobre działanie serwera
pracującego przy małym lub średnim obciążeniu.
Warunek ten jest spełniony do poziomu około 12000 faz zapytao.
Na podstawie średnich czasów potrzebnych do obsługi zapytania stwierdzamy, że ustawienia
domyślne są przeznaczone dla serwerów mniej obciążonych.
Wszystkie wykresy przedstawiające czas potrzebny do obsługi przekazują wyraźny wzrost wartości po
przekroczeniu około 15000 faz zapytao.
Podsumowując w przedstawionych powyżej laboratoriach z pośród testowanych przez nas
parametrów (zmiany „MaxRequestPerChild”,” MinSpareServers”, „MaxSpareThreads” ,
” MinSpareThreads”) najlepiej pracował serwer na którym została zwiększona wartośd
MaxSpareThreads.
Na podstawie przedstawionych powyżej danych oraz empirycznych doświadczeo stwierdzamy , iż
parametr ten (MaxSpareThreads ) ma najbardziej znaczący wpływ na optymalną prace serwera.