ImageMagick 在 Singularity 容器内转换 OOMing
ImageMagick convert OOMing inside Singularity container
当我在 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 中没有看到我的任何其他应用程序 运行ning 的内存问题,这让我认为这是一个 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 如何配置这些限制以及如何更改它们?
问题出在安装在我的容器中的 ImageMagick 系统范围 policy.xml
。使用更慷慨的“内存”和“磁盘”值更新该文件解决了这个问题。
您可以使用命令 convert -list policy
找到系统 policy.xml
文件的位置(向 致敬,这让我明白了这一点)。对我来说是 /etc/ImageMagick-6/policy.xml
。您可以编辑该文件
(如果您有根访问权限)。最后我决定只删除该文件,因为我不希望我的系统完全限制我在容器内的使用。
您可以通过命令行设置限制,比如 convert -limit memory 2GiB ...
或环境变量(有关详细信息,请参阅 )。但是,此方法不允许扩展超过 policy.xml
中设置的系统范围限制,因为 。因此,解决此问题的唯一方法是 update/remove 系统范围的策略。
当我在 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 中没有看到我的任何其他应用程序 运行ning 的内存问题,这让我认为这是一个 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 如何配置这些限制以及如何更改它们?
问题出在安装在我的容器中的 ImageMagick 系统范围 policy.xml
。使用更慷慨的“内存”和“磁盘”值更新该文件解决了这个问题。
您可以使用命令 convert -list policy
找到系统 policy.xml
文件的位置(向 /etc/ImageMagick-6/policy.xml
。您可以编辑该文件
(如果您有根访问权限)。最后我决定只删除该文件,因为我不希望我的系统完全限制我在容器内的使用。
您可以通过命令行设置限制,比如 convert -limit memory 2GiB ...
或环境变量(有关详细信息,请参阅 policy.xml
中设置的系统范围限制,因为