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/
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
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)
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.
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/
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)