La mise en cache de fichiers souvent demandés mais rarement
modifiés est une technique qui peut réduire la charge du
serveur. mmap()
, soit de pré-ouvrir un fichier et de maintenir en
service le gestionnaire du fichier. Chacune de ces techniques
amène à réduire la charge du serveur lors du traitement des
requêtes concernant ces fichiers, en accomplissant une partie du
travail nécessaire à la mise à disposition de ces fichiers (en
particulier les opérations d'entrées/sorties sur les fichiers) au
démarrage du serveur, plutôt qu'au cours de chaque requête.
Note : ces techniques sont inutilisables pour accélérer des programmes CGI ou d'autres fichiers servis par des gestionnaires de contenu spéciaux. Elles ne peuvent être utilisées que pour des fichiers standards en général servis par le gestionnaire de contenu de base d'Apache.
Ce module est une extension et s'inspire fortement du module
d'Apache 1.3 mod_mmap_static
.
Les deux directives ne sont pas supportées par toutes les
plates-formes. Par exemple, Apache pour Windows ne supporte pas
actuellement la directive
La directive mmap()
. Cet appel système est disponible sur la
plupart des plates-formes de style Unix, mais pas sur toutes. Il
existe parfois des limites spécifiques au système quant à la
taille et au nombre de fichiers qui peuvent être
mmap()
és, et l'expérimentation est probablement la
méthode la plus simple pour déterminer ces limites.
Ce mmap()
age n'est effectué qu'une seul fois au
démarrage ou redémarrage du serveur. Ainsi, chaque fois qu'un des
fichiers chargés en mémoire est modifié au niveau du système de
fichiers, vous devez redémarrer le serveur (voir la
documentation sur l'Arrêt et redémarrage). Pour bien
insister sur ce point, si des fichiers sont modifiés sur
disque, et si vous ne redémarrez pas le serveur, vous allez
finir par servir des contenus complètement obsolètes. Vous devez
mettre à jour les fichiers en renommant l'ancienne version et en
enregistrant la nouvelle sur disque. Pour y parvenir, on peut
utiliser des outils comme rdist
et mv
.
La raison pour laquelle ce module ne prend pas en compte les
modifications de fichiers réside dans le fait que cette
vérification nécessiterait un appel à stat()
à chaque
accès, et en fin de compte, l'augmentation de la consommation de
ressources finirait par aller contre le but initial de
réduire les entrées/sorties.
La directive sendfile()
(ou
TransmitFile()
sous Windows).
Cette mise en cache des gestionnaire n'est effectuée qu'une
seule fois au démarrage ou redémarrage du système. Ainsi, chaque
fois qu'un des fichiers chargés en mémoire est modifié au niveau
du système de fichiers, vous devez redémarrer le serveur
(voir la documentation sur l'Arrêt et redémarrage).
Pour bien
insister sur ce point, si des fichiers sont modifiés sur
disque, et si vous ne redémarrez pas le serveur, vous allez
finir par servir des contenus complètement obsolètes. Vous devez
mettre à jour les fichiers en renommant l'ancienne version et en
enregistrant la nouvelle sur disque. Pour y parvenir, on peut
utiliser des outils comme rdist
et
mv
.
Ne cherchez pas de directive qui met tous les
fichiers d'un répertoire en cache, de manière récursive. Pour y
parvenir, vous pouvez vous reporter à la directive
La directive HUP
ou USR1
au serveur afin de les
remmap()
er.
Soyez prudent avec les arguments chemin_fichier : ils
doivent correspondre exactement au chemin du système de fichier que
créent les gestionnaires de traduction URL-vers-nom-fichier
d'Apache. On ne peut pas comparer des inodes ou autres identifiants
pour mettre en correspondance des chemins à l'aide de liens
symboliques (etc...), car là encore, ceci nécessiterait un
appel à stat()
supplémentaire, ce qui est inacceptable.
Il n'est pas garanti que ce module fonctionne avec des noms de
fichiers réécrits par
La directive
Soyez prudent avec les arguments chemin_fichier : ils
doivent correspondre exactement au chemin du système de fichier que
créent les gestionnaires de traduction URL-vers-nom-fichier
d'Apache. On ne peut pas comparer des inodes ou autres identifiants
pour mettre en correspondance des chemins à l'aide de liens
symboliques (etc...), car là encore, ceci nécessiterait un
appel à stat()
supplémentaire, ce qui est inacceptable.
Il n'est pas garanti que ce module fonctionne avec des noms de
fichiers réécrits par