限制ImageMagick内存使用

时间:2012-01-02 12:40:33

标签: memory imagemagick

基本上我试图在我的Nginx服务器上保持一定量的内存使用,因为我疯了(据我的朋友说)&我想省钱。但是我担心ImageMagick会把它推到边缘。

我正在使用-limit area 20MiB,我也尝试了-limit memory 15MiB -limit map 15MiB,但在通过top -c (with Shift-M)ps aux检查流程(运行时)时,它会显示使用,有时,比我在极限中设定的记忆要多得多。为了给出数字,它可能使用35MB或40MB,而不是我期望的20MB / 30MB。我不会为2MB或3MB而烦恼,但这是相当大的偏移。

我被告知额外的内存可能是ImageMagick的开销,因为它加载了解释器等,但我不是非常熟悉Unix程序,所以在该部门没有线索。

如果有人能解释为什么会这样,那就太好了。如果这是正常的事情,那很好。我会调整一些事情,考虑到它可能会使用我的限制加上一定数量的事实,但如果不是,-limit参数不会将内存限制到一定数量,那究竟是什么在ImageMagick中拥有该参数的重点是什么?

再次感谢你的帮助,我们一如既往地非常感谢。

2 个答案:

答案 0 :(得分:2)

根据文档,ImageMagick正在将所有内存操作移动到mmaped文件,因此如果有足够的磁盘空间,它将开始交换,请参阅手册: SNIP来自手册 -limit

  

File的值是文件数。磁盘限制在   Gigabutes和其他资源的值以兆字节为单位。通过   默认限制是768个文件,1024MB内存,4096MB映射,和   无限制磁盘,但这些是在平台启动时调整的   可以提供有关可用资源的信息。当限制   到了,ImageMagick将以某种方式失败,或采取   如果可能的话补偿行动。例如,-limit memory 32 -limit   map 64限制内存当像素缓存达到内存限制时   使用内存映射。达到该限制后,它将转到磁盘。如果   磁盘有硬限制,程序将失败。

答案 1 :(得分:2)

限制仅影响ImageMagick的像素缓存。程序代码和库/代表可以用来加载或处理图像的任何内容都不受这些设置的影响。

您没有在顶部指定您正在查看的内容,正确的列显然是RES或RSIZE。如此小的限制为20MiB,程序和库代码将代表常驻集大小的很大一部分。

要验证您是否为环境变量使用了正确的单位,请使用identify -list resource。如果内存像素高速缓存(MAGICK_MEMORY_LIMIT)的大小不足以用于图像,则将使用mmap-ed文件(MAGICK_MAP_LIMIT),如果该限制太低,则使用传统的磁盘文件(MAGICK_DISK_LIMIT)。如果所有限制都太低,ImageMagick将立即失败,并显示错误,例如cache resources exhaustedMemory allocation failedcorrupt image