【问题标题】:ImageMagick convert OOMing inside Singularity containerImageMagick 在 Singularity 容器内转换 OOMing
【发布时间】:2021-02-16 18:46:27
【问题描述】:

当我在 Singularity 容器中运行特定的 ImageMagick 转换命令(以生成动画 GIF)时,它始终出现内存错误:

convert-im6.q16: cache resources exhausted `foo.gif' @ error/cache.c/OpenPixelCache/4083.
convert-im6.q16: memory allocation failed `foo.gif' @ error/quantize.c/AssignImageColors/496.

如何调试?

我在 Singularity 之外没有遇到任何内存问题,这给我的印象是 Singularity 人为地限制了我的可用内存,或者 ImageMagick 在 Singularity 内部配置不当。我没有看到我在 Singularity 中运行的任何其他应用程序的内存问题,这让我认为这是 ImageMagick 问题。

以下是有关我的系统的一些详细信息:

$ singularity --version
singularity version 3.7.1-1.el8

容器内:

Singularity> convert --version
Version: ImageMagick 6.9.10-23 Q16 x86_64 20190101 https://imagemagick.org
Copyright: © 1999-2019 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC Modules OpenMP 
Delegates (built-in): bzlib djvu fftw fontconfig freetype jbig jng jpeg lcms lqr ltdl lzma openexr pangocairo png tiff webp wmf x xml zlib

Singularity> convert -list resource
Resource limits:
  Width: 16KP
  Height: 16KP
  List length: 18.446744EP
  Area: 128MP
  Memory: 256MiB
  Map: 512MiB
  Disk: 1GiB
  File: 768
  Thread: 256
  Throttle: 0
  Time: unlimited

Memory: 256MiB 特别低。我应该至少有 2GiB。 ImageMagick 如何配置这些限制以及如何更改它们?

【问题讨论】:

  • 感谢您的指点,马克。我试过convert -limit memory 2GiB -list resource,但它仍然列出Memory: 256MiB。容器内似乎发生了一些非常奇怪的事情......
  • 哦,我明白了,我可以使用-limit来减少内存限制,但不能增加它...
  • 您可以试试identify -list configure | grep CONFIGURE_PATH,它应该可以帮助您找到可能限制您的policy.xml 文件。

标签: imagemagick out-of-memory singularity-container


【解决方案1】:

问题出在我的容器中安装的 ImageMagick 的系统范围 policy.xml 上。使用更大的“内存”和“磁盘”值更新该文件可解决此问题。

您可以使用命令convert -list policy 找到系统的policy.xml 文件的位置(Kurt Pfeifle's answer 的提示让我知道了这一点)。对我来说,它位于/etc/ImageMagick-6/policy.xml。您可以编辑该文件 (如果您有 root 访问权限)。最后我决定只删除该文件,因为我不希望我的系统完全限制我在容器内的使用。

您可以通过命令行设置限制,例如convert -limit memory 2GiB ... 或环境变量(有关详细信息,请参阅Kurt Pfeifle's answer)。但是,此方法不允许扩展大于policy.xml 中设置的系统范围限制,因为this policy file is meant to be a way for system administrators to forcibly limit users。因此,解决此问题的唯一方法是更新/删除系统范围的策略。

【讨论】:

  • 谢谢,这对我有用。一个细节,我将 policy.xml 移动到另一个目录而不是 rm 它。
猜你喜欢
  • 1970-01-01
  • 2019-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-06
  • 2014-05-12
  • 1970-01-01
相关资源
最近更新 更多