我的主要问题是:wgMaxShellMemory 是否限制了所有进程用于 shell 任务(如 ImageMagick 缩略图创建)的总内存?或者它是每个进程的限制?此设置的文档似乎很模糊。
我有一个 wiki,它在共享主机上使用的内存过多。我已将罪魁祸首缩小到 ImageMagick 在转换上传的图像时使用了过多的内存。我已在 php.ini 中减少了最大上传大小,这会有所帮助,但我希望 wgMaxShellMemory 可以作为 ImageMagick 和其他 MediaWiki 后台进程的总内存使用量的硬性限制。
顺便说一句,我也无法从文档中弄清楚图像转换是否是作业队列的一部分,从而允许 wgJobRunRate 减慢缩略图的创建速度。
答案1
首先,内存限制仅适用于 GNU/Linux,而不适用于 Windows。
简短回答:这是针对 bash 脚本的每个进程的限制,可能(这在“其子”系统上是正确的,否则该限制就没什么用了)也适用于子进程。因此,每个 ImageMagick 调用都有自己单独的限制。
图像的缩略图生成不属于作业队列的一部分(视频等多媒体则是另一回事)。
细节:
默认情况下,它的工作方式如下:
- 当调用 wfShellExec 时,它会使用 proc_open 创建一个新的 bash 进程。
- 这将运行一个名为限制文件。
- 新的 bash 进程使用设置内存限制 (wgMaxShellMemory)
ulimit -v
。 - 然后,bash 进程使用 /usr/bin/timeout(如果还有挂钟限制)或评估。
手册页bash 的 ulimit说'-v'是“shell 可用的最大虚拟内存量,并且在某些系统上,还为其子进程可用的最大虚拟内存量。”