Manual:$wgShellCgroup
シェルとプロセス制御: $wgShellCgroup | |
---|---|
linux で Cgroups を使用してシェル コマンドのメモリを制限する。 |
|
導入されたバージョン: | 1.21.0 (Gerrit change 47559; git #674962b3) |
除去されたバージョン: | 使用中 |
許容される値: | (文字列) |
既定値: | false |
その他の設定: アルファベット順 | 機能順 |
Under Linux: a cgroup directory used to constrain memory usage of shell commands. ディレクトリは、MediaWiki を実行している利用者が書き込めるようにしてください。
If specified, this is used instead of ulimit, which is inaccurate, and causes malloc() to return NULL, which exposes bugs in C applications, making them segfault or deadlock.
A wrapper script will create a cgroup for each shell command that runs, as a subgroup of the specified cgroup. If the memory limit is exceeded, the kernel will send a SIGKILL signal to a process in the subgroup. (MediaWiki will often report this error as error code 137, after the bash return status of a command receiving SIGKILL)
セットアップ
cgroup をセットアップしていない場合は、cgroup ファイルシステムをマウントする必要がある場合があります。 root として以下を実行します:
mount -t tmpfs cgroup_root /sys/fs/cgroup mkdir /sys/fs/cgroup/memory mount -t cgroup cgroup_memory -omemory /sys/fs/cgroup/memory
Next you need to do MediaWiki specific configuration:
mkdir -p /sys/fs/cgroup/memory/mediawiki mkdir -m 0777 /sys/fs/cgroup/memory/mediawiki/job
The reliability of cgroup cleanup can be improved by installing a notify_on_release script in the root cgroup (This step is optional).
- Copy modules/mediawiki/files/cgroup/cgroup-mediawiki-clean from operations/puppet.git to /usr/local/bin/cgroup-mediawiki-clean
- 以下のコマンドを実行します:
echo "/usr/local/bin/cgroup-mediawiki-clean" > /sys/fs/cgroup/memory/release_agent
Last of all, enable cgroups in your LocalSettings.php
echo '$wgShellCgroup = "/sys/fs/cgroup/memory/mediawiki/job";' >> LocalSettings.php
The reliability of cgroup cleanup can be improved by installing a notify_on_release script in the root cgroup, see e.g. gerrit:40784
トラブルシューティング
cgroups が動作しない場合は、以下をお試しください:
- cgroup-bin パッケージをインストールします
- コマンド
cat /proc/cgroups
を実行します。 If the memory subsystem has a 0 under enabled, then memory cgroups may be disabled in your kernel. Try rebooting your computer withcgroup_enable=memory swapaccount=1
on the kernel command line.
- Older bash doesn't like the readarray call in limit.sh.
少なくともバージョン 4.1 を使用すべきです
関連項目
- cgroup-mediawiki-clean shell script