Palvelimen suorituskyvyn parantaminen

Tehtävänä oli parantaa palvelimen suorituskykyä Varnishin avulla. Virtuaalipalvelimena minulla on tilaa.nl:n virtuaalipalvelin seuraavalla kokoonpanolla (halvin mahdollinen):
RAM 256 Mt
Kiintolevytilaa 10Gt
Prosessori 1 × 2.4 Ghz @ 40%

Edit:Tehtävän edetessä swappini täyttyi ja tiedonsiirron määrä nousi mahdollisesti sen verran suureksi, että hakuajat pitenivät huomattavasti ja palvelin muuttui niin hitaaksi, että päätin uudelleenkäynnistää palvelimeni. Uudelleenkäynnistämisen jälkeen vaihdoin komentoa toiseen, minkä ystäväni kertoi.

Aloitus

Aloitin tehtävän tekemisen kokeilemalla kuinka nopeasti sivut haetaan ennen Varnishin asennusta. Kohdesivuna oli wordpressin aloitussivu, jossa näkyi minun kaksi blogiartikkelia. Komennossa ab -c 100 -n 100 http://ip-osoite/kohdesivu, ab tarkoittaa ohjelmaa, mitä käytän hakujen tekemiseen, -c 100 määrittelee kuinka monta hakua peräkkäin, ja -n 100 määrittelee kuinka monta hakua rinnakkain.

$ ab -c 100 -n 100 http://164.xxx.xxx.xxx/~eitsei/wordpress
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 164.xxx.xxx.xxx (be patient).....done

Server Software:        Apache/2.2.22
Server Hostname:        164.xxx.xxx.xxx
Server Port:            80

Document Path:          /~eitsei/wordpress
Document Length:        328 bytes

Concurrency Level:      100
Time taken for tests:   0.148 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Non-2xx responses:      100
Total transferred:      59100 bytes
HTML transferred:       32800 bytes
Requests per second:    675.71 [#/sec] (mean)
Time per request:       147.992 [ms] (mean)
Time per request:       1.480 [ms] (mean, across all concurrent requests)
Transfer rate:          389.99 [Kbytes/sec] received

Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        4    5   0.4      5       6
Processing:   118  129   6.8    129     139
Waiting:        4  116  37.7    127     137
Total:        123  134   6.6    134     144

Percentage of the requests served within a certain time (ms)
50%    134
66%    138
75%    140
80%    142
90%    144
95%    144
98%    144
99%    144
100%    144 (longest request)

Tärkeintä on kiinnittää huomiota pisimpään hakuun, eli longest request kohdan aikaa. Tässä tapauksessa pisin haku kesti 144 millisekunttia. Seuraavaksi kokeilin vielä kuinka kauan kestää hakea sivu 800 kertaa  800 hakupyyntöä rinnakkain (yhtäaikaa).

$ ab -c 800 -n 800 http://164.xxx.xxx.xxx/~eitsei/wordpress
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 164.xxx.xxx.xxx (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Finished 800 requests

Server Software:        Apache/2.2.22
Server Hostname:        164.xxx.xxx.xxx
Server Port:            80

Document Path:          /~eitsei/wordpress
Document Length:        328 bytes

Concurrency Level:      800
Time taken for tests:   0.687 seconds
Complete requests:      800
Failed requests:        0
Write errors:           0
Non-2xx responses:      800
Total transferred:      472800 bytes
HTML transferred:       262400 bytes
Requests per second:    1164.43 [#/sec] (mean)
Time per request:       687.030 [ms] (mean)
Time per request:       0.859 [ms] (mean, across all concurrent requests)
Transfer rate:          672.05 [Kbytes/sec] received

Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0   15  15.4      1      35
Processing:     7  157 207.5     45     648
Waiting:        5  155 207.5     43     647
Total:         33  173 216.6     46     676

Percentage of the requests served within a certain time (ms)
50%     46
66%     71
75%    255
80%    264
90%    659
95%    668
98%    674
99%    676
100%    676 (longest request)

Kuten huomataan hakujen kasvaessa, pisimmän haun kesto kasvaa selvästi. Tämän jälkeen asensin Varnishin ja tein haut uudestaan.

$ ab -c 100 -n 100 http://164.xxx.xxx.xxx/~eitsei/wordpress
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 164.xxx.xxx.xxx (be patient).....done

Server Software:        Apache/2.2.22
Server Hostname:        164.xxx.xxx.xxx
Server Port:            80

Document Path:          /~eitsei/wordpress
Document Length:        328 bytes

Concurrency Level:      100
Time taken for tests:   0.032 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Non-2xx responses:      100
Total transferred:      59100 bytes
HTML transferred:       32800 bytes
Requests per second:    3089.18 [#/sec] (mean)
Time per request:       32.371 [ms] (mean)
Time per request:       0.324 [ms] (mean, across all concurrent requests)
Transfer rate:          1782.92 [Kbytes/sec] received

Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        4    6   0.4      6       6
Processing:     4   14   6.5     14      24
Waiting:        2   12   6.1     12      23
Total:          9   19   6.3     19      29

Percentage of the requests served within a certain time (ms)
50%     19
66%     23
75%     25
80%     26
90%     28
95%     29
98%     29
99%     29
100%     29 (longest request)

Varnish nopeutti hakuja huomattavasti kuten ylhäältä voidaan todeta. Tämän jälkeen halusin kokeilla vielä lisää ja nyt palvelin hidastui huomattavasti.

$ ab -c 10 -n 10 http://164.xxx.xxx.xxx/~eitsei/wordpress/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 164.xxx.xxx.xxx (be patient).....done

Server Software:        Apache/2.2.22
Server Hostname:        164.xxx.xxx.xxx
Server Port:            80

Document Path:          /~eitsei/wordpress/
Document Length:        17869 bytes

Concurrency Level:      10
Time taken for tests:   24.895 seconds
Complete requests:      10
Failed requests:        0
Write errors:           0
Total transferred:      181400 bytes
HTML transferred:       178690 bytes
Requests per second:    0.40 [#/sec] (mean)
Time per request:       24894.999 [ms] (mean)
Time per request:       2489.500 [ms] (mean, across all concurrent requests)
Transfer rate:          7.12 [Kbytes/sec] received

Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0    1   0.4      1       1
Processing: 18024 23811 2073.0  24368   24894
Waiting:    11140 11612 1490.8  11141   15855
Total:      18024 23812 2073.1  24368   24895

Percentage of the requests served within a certain time (ms)
50%  24368
66%  24757
75%  24830
80%  24831
90%  24895
95%  24895
98%  24895
99%  24895
100%  24895 (longest request)

Syytä tähän en oikein ymmärtänyt, ja ssh yhteyskin alkoi lagaamaan huomattavasti. Päätin uudelleenkäynnistää virtuaalipalvelimen, jotta voisin kokeilla uudestaan. Uudelleenkäynnistämisen jälkeen palvelin toimi vieläkin todella hitaasti. Palvelimen tilastoista huomasin, että swapin käyttö kasvoi huomattavasti varsinkin kun kokeilin suorittaa 800 hakua 800 kertaa rinnaikkain. Tämän takia jätin palvelimen rauhoittumaan hetkeksi ja päätin kokeilla hetken päästä uudestaan.

Tauon jälkeenkin palvelin toimi hitaasti.

$ ab -n 100 -c 100 http://164.xxx.xxx.xxx/~eitsei/wordpress/2013/02/11/wordpress-asennettu-onnistuneesti/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 164.xxx.xxx.xxx (be patient)...apr_poll: The timeout specified has expired (70007)

Uudelleen käynnistämisen jälkeen

Vaihdoin komentoa eriksi, jottei palvelin taas kaatuisi swapin täyttymisen takia. Nyt hakuajat olivat paremmat eli varnish nopeutti kuitenki loppujen lopuksi hakuja.

$ ab -kc 10 -t 5 'http://164.xxx.xxx.xxx/~eitsei/wordpress/2013/02/11/wordpress-asennettu-onnistuneesti/'
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 164.xxx.xxx.xxx (be patient)
Completed 5000 requests
Finished 5315 requests

Server Software:        Apache/2.2.22
Server Hostname:        164.xxx.xxx.xxx
Server Port:            80

Document Path:          /~eitsei/wordpress/2013/02/11/wordpress-asennettu-onnistuneesti/
Document Length:        18594 bytes

Concurrency Level:      10
Time taken for tests:   5.044 seconds
Complete requests:      5315
Failed requests:        0
Write errors:           0
Keep-Alive requests:    0
Total transferred:      101091390 bytes
HTML transferred:       98957268 bytes
Requests per second:    1053.67 [#/sec] (mean)
Time per request:       9.491 [ms] (mean)
Time per request:       0.949 [ms] (mean, across all concurrent requests)
Transfer rate:          19571.05 [Kbytes/sec] received

Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0    0   0.2      0       3
Processing:     0    8  49.9      3     620
Waiting:        0    0   1.3      0      46
Total:          0    8  49.9      3     620

Percentage of the requests served within a certain time (ms)
50%      3
66%      4
75%      5
80%      5
90%      6
95%     11
98%     15
99%     21
100%    620 (longest request)

 

Bookmark the permalink.

Comments are closed.