MediaWiki 的 $wgMaxShellMemory 实际上控制什么?

MediaWiki 的 $wgMaxShellMemory 实际上控制什么?

我的主要问题是:wgMaxShellMemory 是否限制了所有进程用于 shell 任务(如 ImageMagick 缩略图创建)的总内存?或者它是每个进程的限制?此设置的文档似乎很模糊。

我有一个 wiki,它在共享主机上使用的内存过多。我已将罪魁祸首缩小到 ImageMagick 在转换上传的图像时使用了过多的内存。我已在 php.ini 中减少了最大上传大小,这会有所帮助,但我希望 wgMaxShellMemory 可以作为 ImageMagick 和其他 MediaWiki 后台进程的总内存使用量的硬性限制。

顺便说一句,我也无法从文档中弄清楚图像转换是否是作业队列的一部分,从而允许 wgJobRunRate 减慢缩略图的创建速度。

答案1

首先,内存限制仅适用于 GNU/Linux,而不适用于 Windows。

简短回答:这是针对 bash 脚本的每个进程的限制,可能(这在“其子”系统上是正确的,否则该限制就没什么用了)也适用于子进程。因此,每个 ImageMagick 调用都有自己单独的限制。

图像的缩略图生成不属于作业队列的一部分(视频等多媒体则是另一回事)。


细节:

默认情况下,它的工作方式如下:

  1. 当调用 wfShellExec 时,它会使用 proc_open 创建一个新的 bash 进程。
  2. 这将运行一个名为限制文件
  3. 新的 bash 进程使用设置内存限制 (wgMaxShellMemory) ulimit -v
  4. 然后,bash 进程使用 /usr/bin/timeout(如果还有挂钟限制)或评估

手册页bash 的 ulimit说'-v'是“shell 可用的最大虚拟内存量,并且在某些系统上,还为其子进程可用的最大虚拟内存量。”

注意:一个选项使用cgroups,但默认情况下处于关闭状态。

相关内容