Manuel:$wgShellCgroup

From mediawiki.org
This page is a translated version of the page Manual:$wgShellCgroup and the translation is 100% complete.
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

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

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 avec cgroup_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

Voir aussi