Manuel:$wgShellCgroup
Shell et contrôle de processus: $wgShellCgroup | |
---|---|
Limite la mémoire attribuée aux commandes de shell en utilisant les Cgroups Linux. |
|
Introduit dans la version : | 1.21.0 (Gerrit change 47559; git #674962b3) |
Retiré dans la version : | Encore utilisé |
Valeurs autorisées : | (chaîne) |
Valeur par défaut : | false |
Autres paramètres : Alphabétique | Par fonction |
Sous Linux: un répertoire cgroup utilisé pour restreindre l'usage de mémoire des commandes shell.
Le répertoire doit être modifiable par l'utilisateur qui contrôle MédiaWiki.
Si spécifié, ceci est utilisé à la place de ulimit, qui n'est pas précis, et fait que malloc() retourne NULL, ce qui montre des bugs dans les applications C, les faisant dysfonctionner ou se bloquer.
Un script de lancement créera un cgroup pour chaque commande shell exécutée, comme un sous-groupe du cgroupe spéficié. Si la limite de mémoire est dépassée, le noyau va envoyer un signal SIGKILL à un processus dans le sous-groupe. (MédiaWiki va souvent reporter cette erreur comme une erreur 137, d'après le statut de retour bash d'une commande recevant SIGKILL)
Configurer
Si les cgroupes ne sont pas définis, vous devriez peut-être monter le système de fichiers cgroup. En tant que root :
mount -t tmpfs cgroup_root /sys/fs/cgroup mkdir /sys/fs/cgroup/memory mount -t cgroup cgroup_memory -omemory /sys/fs/cgroup/memory
Ensuite vous devez faire la configuration spécifique de MédiaWiki:
mkdir -p /sys/fs/cgroup/memory/mediawiki mkdir -m 0777 /sys/fs/cgroup/memory/mediawiki/job
La fiabilité du nettoyage de cgroup peut être améliorée en installant un script de notify_on_release dans le cgroup racine (Cette étape est optionnelle).
- Copy modules/mediawiki/files/cgroup/cgroup-mediawiki-clean from operations/puppet.git to /usr/local/bin/cgroup-mediawiki-clean
- Exécuter la commande
echo "/usr/local/bin/cgroup-mediawiki-clean" > /sys/fs/cgroup/memory/release_agent
Pour finir, activez les cgroupes dans vos LocalSettings.php .
echo '$wgShellCgroup = "/sys/fs/cgroup/memory/mediawiki/job";' >> LocalSettings.php
La fiabilité du nettoyage de cgroup peut être améliorée en installant un script de notify_on_release dans le cgroup racine, voir e.g. gerrit:40784.
Résolution des problèmes
Si les cgroupes ne marchent pas, voici les choses à essayer:
- Installer le package cgroup-bin
- Exécuter la commande
cat /proc/cgroups
. Si votre sous-système de mémoire a 0 sous activé, les cgroups mémoire peuvent être désactivés dans votre noyau. Essayez de rallumer votre ordinateur aveccgroup_enable=memory swapaccount=1
sur la ligne de commande du noyau. - L'ancien bash n'aime pas l'appel readarray dans limit.sh. Vous devez utiliser au moins la version 4.1