serveur dédié - partie 4 - Performances apache

Performances de base

Voyons ce que donne ApacheBench (package httpd-tools) avec la configuration de base:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
root@ks vhost.d$ ab -kc 10 -t 30 https://wiki.hedwy.fr/
This is ApacheBench, Version 2.3
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking wiki.hedwy.fr (be patient)
Finished 193 requests


Server Software: Apache/2.2.15
Server Hostname: wiki.hedwy.fr
Server Port: 443
SSL/TLS Protocol: TLSv1/SSLv3,DHE-RSA-AES256-SHA,1024,256

Document Path: /
Document Length: 0 bytes

Concurrency Level: 10
Time taken for tests: 30.086 seconds
Complete requests: 193
Failed requests: 0
Write errors: 0
Non-2xx responses: 193
Keep-Alive requests: 0
Total transferred: 105821 bytes
HTML transferred: 0 bytes
Requests per second: 6.41 [#/sec] (mean)
Time per request: 1558.854 [ms] (mean)
Time per request: 155.885 [ms] (mean, across all concurrent requests)
Transfer rate: 3.43 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 47 118 113.4 91 1294
Processing: 925 1395 131.1 1396 1763
Waiting: 925 1391 132.2 1391 1763
Total: 1100 1513 160.7 1505 2441

Percentage of the requests served within a certain time (ms)
50% 1505
66% 1567
75% 1601
80% 1620
90% 1671
95% 1756
98% 1911
99% 2027
100% 2441 (longest request)

J’obtient quelque chose de similaire à ma VM de dev … On doit pouvoir faire mieux.

Tuning Apache

httpd.conf

La première chose à faire est de supprimer le “HostnameLookups” et de configurer le KeepAlive

1
2
3
4
5
6
7
8
# HostnameLookups: Log the names of clients or just their IP addresses
HostnameLookups Off
# KeepAlive: Whether or not to allow persistent connections
KeepAlive On
# MaxKeepAliveRequests: The maximum number of requests to allow
MaxKeepAliveRequests 100
# KeepAliveTimeout: Number of seconds to wait for the next request from the
KeepAliveTimeout 15

La seconde est de configurer le moteur utilisé. Dans mon cas c’est prefork

1
2
3
4
5
6
7
8
< IfModule prefork.c >
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 1000
< /IfModule >

Ces modifs sont assez importantes dans le cas d’un serveur dédié à une appli et fortement utilisé. Il faut alors paramèterer ces valeurs en fonction de la quantité de mémoire du serveur, du nombre de requête, et de la mémoire prise par une requête.

Virtualhosts

C’est la partie “Directory” des virtualhost qui nous interesse.
Ici nous allons supprimer les .htaccess (AllowOverrides None) et supprimer les vérifications sur les liens symboliques (Options FollowSymLinks)

1
2
3
4
< Directory / >
AllowOverride None
Options FollowSymLinks
< /Directory >

L’ensemble des modifications apache seront prises en comptes après un restart.
Dans le cas du wiki les gains seront faibles (le .htaccess était déjà désactivé et pas de liens symboliques). Mais sur d’autres le gain a été appréciable.

Tuning système

Au niveau du sysconfig j’ai suivi les précOS trouvées sur le site d’IBM

1
2
3
4
5
6
7
8
9
10
11
12
13
root@ks $ cat /etc/sysctl.conf 
# Use TCP syncookies when needed
net.ipv4.tcp_syncookies = 1
# Enable TCP window scaling
net.ipv4.tcp_window_scaling = 1
# Increase TCP max buffer size
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
# Increase Linux autotuning TCP buffer limits
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# Increase number of ports available
net.ipv4.ip_local_port_range = 1024 65000

cache opcode PHP

Jusqu’à présent les gains n’ont rien de spectaculaires. Et pour cause: le serveur est peu sollicitées, les appli ne sont pas bien lourdes et “ab” montre bien que c’est le traitement PHP qui ralenti les pages.

Je voulais utiliser php-eaccelerator au départ. Mais il y a un problème de dépendances dans le déport REMI. Je suis donc partis sur un des composants de pecl: APC.

1
2
root@ks $ yum --enablerepo=remi install php-pecl-apc
root@ks $service httpd restart

C’est donc un module PHP. Son fichier de conf se trouve dans /etc/php.d/apc.ini, mais je n’y ai pas touché.

Cette fois ci le gain est nettement sensible:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
root@ks $ ab -kc 10 -t 30 https://wiki.hedwy.fr/
This is ApacheBench, Version 2.3
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking wiki.hedwy.fr (be patient)
Finished 894 requests


Server Software: Apache/2.2.15
Server Hostname: wiki.hedwy.fr
Server Port: 443
SSL/TLS Protocol: TLSv1/SSLv3,DHE-RSA-AES256-SHA,1024,256

Document Path: /
Document Length: 0 bytes

Concurrency Level: 10
Time taken for tests: 30.003 seconds
Complete requests: 894
Failed requests: 0
Write errors: 0
Non-2xx responses: 894
Keep-Alive requests: 894
Total transferred: 523346 bytes
HTML transferred: 0 bytes
Requests per second: 29.80 [#/sec] (mean)
Time per request: 335.605 [ms] (mean)
Time per request: 33.561 [ms] (mean, across all concurrent requests)
Transfer rate: 17.03 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 3 24.5 0 302
Processing: 228 332 44.5 329 542
Waiting: 227 331 44.6 329 542
Total: 228 334 49.8 331 650

Percentage of the requests served within a certain time (ms)
50% 331
66% 351
75% 364
80% 370
90% 387
95% 407
98% 469
99% 511
100% 650 (longest request)

Note

http://blog.monitis.com/index.php/2011/07/05/25-apache-performance-tuning-tips/
http://www.ibm.com/developerworks/library/l-tune-lamp-1/index.html
http://www.ibm.com/developerworks/library/l-tune-lamp-2/index.html