Příručka:$wgShellCgroup
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 |
Další nastavení: Podle abecedy | Podle funkce |
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ý).
- Zkopírujte modules/mediawiki/files/cgroup/cgroup-mediawiki-clean z operations/puppet.git do /usr/local/bin/cgroup-mediawiki-clean
- Spusťte příkaz
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říkazucgroup_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