Příručka:$wgShellCgroup

This page is a translated version of the page Manual:$wgShellCgroup and the translation is 100% complete.
Shell a řízení procesů: $wgShellCgroup
Omezí paměť příkazů shellu pomocí linuxových Cgroups.
Zavedeno od verze:1.21.0 (Gerrit change 47559; git #674962b3)
Odstraněno od verze:stále se používá
Povolené hodnoty:(řetězec)
Výchozí hodnota:false

Pod Linuxem: Adresář cgroup používaný k omezení využití paměti příkazy shellu. Adresář musí být zapisovatelný pro uživatele, který spouští MediaWiki.

Je-li zadáno, použije se místo ulimit, což je nepřesné, a způsobí, že malloc() vrátí hodnotu NULL, což odhalí chyby v aplikacích C a způsobí jejich segfault nebo uváznutí.

Obalový skript vytvoří cgroup pro každý spuštěný příkaz shellu jako podskupinu zadané cgroup. Pokud je limit paměti překročen, jádro pošle signál SIGKILL procesu v podskupině. (MediaWiki často hlásí tuto chybu jako chybový kód 137 po návratu bash příkazu přijímajícího SIGKILL)

Nastavení

Pokud cgroups nejsou nastaveny, možná budete muset připojit souborový systém cgroup. Jako root:

mount -t tmpfs cgroup_root /sys/fs/cgroup
mkdir /sys/fs/cgroup/memory
mount -t cgroup cgroup_memory -omemory /sys/fs/cgroup/memory

Dále musíte provést specifickou konfiguraci MediaWiki:

mkdir -p /sys/fs/cgroup/memory/mediawiki
mkdir -m 0777 /sys/fs/cgroup/memory/mediawiki/job

Spolehlivost čištění cgroup lze zlepšit instalací skriptu notify_on_release do kořenové cgroup (Tento krok je volitelný).

echo "/usr/local/bin/cgroup-mediawiki-clean" > /sys/fs/cgroup/memory/release_agent

Nakonec povolte cgroups ve vašem LocalSettings.php

echo '$wgShellCgroup = "/sys/fs/cgroup/memory/mediawiki/job";' >> LocalSettings.php

Spolehlivost vyčištění cgroup lze zlepšit instalací skriptu notify_on_release do kořenové cgroup, viz např. gerrit:40784

Řešení problémů

Pokud cgroups nefungují, zkuste to:

  • Nainstalujte balíček cgroup-bin
  • Spusťte příkaz cat /proc/cgroups. Pokud má paměťový subsystém povolenou 0, pak mohou být paměťové cgroups ve vašem jádře zakázány. Zkuste restartovat počítač pomocí příkazu cgroup_enable=memory swapaccount=1 na příkazovém řádku jádra.
  • Starší bash nemá rád volání readarray v limit.sh. Měli byste použít alespoň 4.1

Související odkazy