Serveur Apache HTTP Version 2.4

Apache > Serveur HTTP > Documentation > Version 2.4 > Modules

# Apache MPM prefork

Description: | Implémente un serveur web avec démarrage anticipé de processus, sans thread
Statut: | MPM
Identificateur de Module: | mpm_prefork_module
Fichier Source: | prefork.c

### Sommaire

Ce module multi-processus (MPM) implémente un serveur web avec démarrage anticipé de processus. Chaque processus du serveur peut répondre aux requêtes entrantes, et un processus parent contrôle la taille du jeu de processus enfants. Il est particulièrement indiqué pour les sites qui ne doivent pas utiliser les threads afin de maintenir une compatibilité avec certaines bibliothèques non sûres du point de vue des threads. C'est également le MPM le plus approprié si l'on veut isoler les requêtes les unes des autres, de façon à ce qu'un problème concernant une requête n'affecte pas les autres.

Ce MPM s'auto-contrôle de manière efficace, de sorte qu'il est rarement nécessaire d'ajuster ses directives de configuration. Le plus important est la définition de la directive `MaxRequestWorkers` ; sa valeur doit être assez grande pour pouvoir traiter autant de requêtes simultanées que vous pensez recevoir, mais assez petite pour conserver suffisamment de mémoire RAM pour tous les processus.

### Sujets

- Comment ça marche

### Directives

### Traitement des bugs

- Journal des modifications de httpd
- Problèmes connus
- Signaler un bug

### Voir aussi

- Définition des adresses et ports qu'utilise le serveur HTTP Apache

## Comment ça marche

Un processus de contrôle unique a pour tâche de lancer les processus enfants qui attendent les connexions et les traitent au fur et à mesure qu'elles arrivent. Apache httpd essaie toujours de maintenir plusieurs processus serveurs inactifs ou en réserve, afin de pouvoir traiter les requêtes entrantes. De cette façon, les clients n'ont pas besoin d'attendre le démarrage d'un nouveau processus enfant pour que leurs requêtes puissent être traitées.

Les directives `StartServers`, `MinSpareServers`, `MaxSpareServers` et `MaxRequestWorkers` permettent de contrôler la manière dont le processus parent crée les processus enfants pour traiter les requêtes. En général, Apache httpd s'auto-contrôle de manière efficace, de sorte que la plupart des sites peuvent conserver les valeurs par défaut des directives. Les sites qui doivent traiter plus de 256 requêtes simultanées doivent augmenter la valeur de `MaxRequestWorkers`, alors que les sites dont la ressource mémoire est limitée doivent la diminuer afin d'éviter une hyperactivité du serveur (utilisation excessive de la mémoire virtuelle sur disque). Vous trouverez plus d'informations à propos du contrôle de la création de processus dans le document conseils en matière de performances

Alors que le processus parent est en général démarré en tant que `root` sous Unix afin de pouvoir se mettre à l'écoute sur le port 80, les processus enfants sont lancés par Apache httpd sous un utilisateur avec privilèges restreints. On peut contrôler les privilèges accordés aux processus enfants d'Apache httpd à l'aide des directives `User` et `Group`. Les processus enfants doivent être en mesure de lire tous les contenus destinés à être servis, mais leurs privilèges doivent être aussi bas que possible.

La directive `MaxConnectionsPerChild` permet de contrôler la fréquence à laquelle le serveur recycle ses processus en arrêtant les plus anciens et en en lançant de nouveaux.

Ce module MPM utilise le mutex `mpm-accept` pour sérialiser l'accès aux connexions entrantes lorsque peut se présenter un problème d'afflux de requêtes (en général quand il y a plusieurs sockets en écoute). Les aspects de l'implémentation de ce mutex peuvent être configurés via la directive `Mutex`. Vous trouverez des informations supplémentaires à propos de ce mutex dans la documentation à propos des conseils en matière de performances

## Directive MaxSpareServers

Description: | Nombre maximum de processus serveurs enfants inactifs
Syntaxe: | `MaxSpareServers nombre`
Défaut: | `MaxSpareServers 10`
Contexte: | configuration du serveur
Statut: | MPM
Module: | prefork

La directive `MaxSpareServers` permet de définir le nombre maximum souhaité de processus serveurs enfants inactifs. Un processus inactif est un processus qui ne traite pas de requête. S'il y a plus de `MaxSpareServers` processus inactifs, le processus parent arrêtera les processus excédentaires.

La modification de ce paramètre n'est nécessaire que dans le cas de sites très sollicités. Définir ce paramètre à une valeur très grande est cependant dans la plupart des cas une mauvaise idée. Si vous essayez d'affecter à ce paramètre une valeur égale ou inférieure à la valeur de `MinSpareServers`, le serveur HTTP Apache l'ajustera automatiquement à la valeur de `MinSpareServers``+ 1`.

### Voir aussi

- `MinSpareServers`
- `StartServers`
- `MaxSpareThreads`

## Directive MinSpareServers

Description: | Nombre minimum de processus serveurs enfants inactifs
Syntaxe: | `MinSpareServers nombre`
Défaut: | `MinSpareServers 5`
Contexte: | configuration du serveur
Statut: | MPM
Module: | prefork

La directive `MinSpareServers` permet de définir le nombre minimum désiré de processus serveurs enfants inactifs. Un processus inactif est un processus qui ne traite pas de requête. S'il y a moins de `MinSpareServers` processus inactifs, le processus parent va créer de nouveaux enfants de la manière suivante : il en crée un, attend une seconde, il en crée deux, attend une seconde, il en crée quatre, puis continue ainsi exponentiellement jusu'à ce que son taux de création de processus enfants soit de 32 par seconde. Il ne s'arrête que lorsque le nombre de processus enfants correspond à la définition de la directive `MinSpareServers`.

La modification de ce paramètre n'est nécessaire que dans le cas de sites très sollicités. Définir ce paramètre à une valeur très grande est dans la plupart des cas une mauvaise idée.

### Voir aussi

- `MaxSpareServers`
- `StartServers`
- `MinSpareThreads`