MediaWiki的$ wgMaxShellMemory实际控制什么?

我的主要问题是:是否wgMaxShellMemory限制所有进程的shell任务使用的总内存,如ImageMagick缩略图创build? 还是这是一个进程的限制? 这个设置的文档看起来很模糊。

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

作为一个旁注,我也无法弄清楚图像转换是否是作业队列的一部分,从而允许wgJobRunRate减慢缩略图的创build。

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

简短的回答:这是bash脚本的每个进程的限制,这可能(对于“它的子”系统是这样,而且这个限制没有多大用处),也适用于subprocess。 所以每个ImageMagick调用都有自己的限制。

图像的缩略图生成不是作业队列的一部分(像video这样的多媒体是另一回事)。


细节:

默认情况下,它是这样工作的:

  1. 当调用wfShellExec时,它将使用proc_open创build一个新的bash进程。
  2. 运行一个名为limit.sh的bash脚本。
  3. 新的bash进程使用ulimit -v设置内存限制(wgMaxShellMemory)。
  4. 然后,bash进程使用/ usr / bin / timeout(如果还有挂钟限制)或eval运行所需的命令。

bash的ulimit的手册页说'-v'是“可用于shell的虚拟内存的最大数量,以及在某些系统上可用的子虚拟内存”。

注:有一个选项可以使用cgroups ,但默认情况下是closures的。