Login Logout

HowtoLAMP/Performances.md

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**

# Howto Performances sur une plateforme LAMP

<http://gtmetrix.com/>
<https://developers.google.com/speed/pagespeed/insights/>

Les performances d'une plateforme web, cela signifie :

* Un affichage rapide pour vos visiteurs/utilisateurs (critère A)
* Une utilisation minimale des ressources de votre infrastructure (critère B)
* Une perception performante pour les moteurs de recherche (critère C)

## Au niveau applicatif

* Choix du langage

## Au niveau système

* Apache/mod_php vs Apache/CGI vs Nginx/FPM ?
* Reverse/proxy/cache

### Optimisation de la mémoire de MySQL

### Optimisation des process Apache

Apache sera d'autant plus réactif qu'il a des process en mode "idle" prêt à répondre.
Pour cela, il faut une méthode empirique : observer les process sur plusieurs jours/semaines/mois
avec courbes Munin par exemple, puis ajuster les valeurs pour s'assurer qu'il y a en permanence
un minimum de process en mode "idle".

Voici un exemple d'optimisation :

~~~
    Timeout              10
    KeepAlive            On
    MaxKeepAliveRequests 25
    KeepAliveTimeout      3
    StartServers         50
    MinSpareServers      30
    MaxSpareServers      50
    ServerLimit         250
    MaxClients          250
    MaxRequestsPerChild   0
~~~


### Compression GZIP / DEFLATE

Le principe est de compresser les fichiers HTML/Javascript/CSS côté serveur, de les envoyer compressés au navigateur, et le navigateur les décompresse.

Avec Apache, cela se fait via le module mod_deflate et avec une configuration du type :

~~~
<IfModule mod_deflate.c>
    # OK avec tous la navigateurs (dont MSIE 6, si si)
    AddOutputFilterByType DEFLATE text/html text/plain text/xml

    # ...bon, des vieilles versions de MSIE 6 peuvent raler pour ca...
    AddOutputFilterByType DEFLATE text/css
    AddOutputFilterByType DEFLATE application/x-javascript application/javascript application/ecmascript
    AddOutputFilterByType DEFLATE application/rss+xml

    # On ajoute donc des exceptions :
    # pour Netscape Navigator 4...
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4.0[678] no-gzip
    # ...mais tout est OK pour MSIE, on exclue de l'exclusion...
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
    # ...sauf pour MSIE 6 et inferieur, que l'on exclue definitivement (paix a leurs ames).
    BrowserMatch "MSIE [3456]" no-gzip
</IfModule>
~~~


## mod_pagespeed

Nous déconseillons l'utilisation de _mod_pagespeed_

Le problème principal de _mod_pagespeed_ est qu'il est mal codé : en résumé il embarque de nombreuses bibliothèques au lieu d'utiliser celles du système, ce qui pose des problèmes de sécurité, voir <https://github.com/pagespeed/mod_pagespeed/issues/226> ; et qu'il n'est donc pas inclu dans les distributions Linux, notamment dans Debian, voir <http://bugs.debian.org/602316>

Deuxième problème avec "mod_pagespeed" il utilise des répertoires de cache partagés entre les différents comptes ce qui est incompatible avec le module Apache-ITK indispensable pour cloisonner les différents comptes sur un serveur.
Ce problème nécessite une configuration spécifique avec ModPagespeedFileCachePath à mettre en place dans chaque VirtualHost qui l'utilise.

Nous préconisons plutôt l'optimisation du code HTML/JS/CSS/etc. indépendamment de "mod_pagespeed" en appliquant les préconisations via <https://developers.google.com/speed/pagespeed/insights>

## Au niveau infrastructure

* DNS
* Cloud ?
* CDN ?