Memory 限制ImageMagick内存使用

Memory 限制ImageMagick内存使用,memory,imagemagick,Memory,Imagemagick,基本上,我正试图将我的Nginx服务器上的内存使用量控制在一定的范围内,这两个原因都是因为我疯了(据我的朋友说),我想省钱。但是我担心ImageMagick会把它推到边缘 我使用的是-limit area 20MiB,我也尝试过-limit memory 15MiB-limit map 15MiB,但当通过top-c(带Shift-m)和ps aux检查进程(运行时)时,它使用的内存有时比我在限制中设置的要多得多。为了给出数字,它可能使用35MB或40MB,而不是我预期的20MB/30MB。我不

基本上,我正试图将我的Nginx服务器上的内存使用量控制在一定的范围内,这两个原因都是因为我疯了(据我的朋友说),我想省钱。但是我担心ImageMagick会把它推到边缘

我使用的是
-limit area 20MiB
,我也尝试过
-limit memory 15MiB-limit map 15MiB
,但当通过
top-c(带Shift-m)
ps aux
检查进程(运行时)时,它使用的内存有时比我在限制中设置的要多得多。为了给出数字,它可能使用35MB或40MB,而不是我预期的20MB/30MB。我不会为2MB或3MB而烦恼,但这是一个相当大的偏移量

有人告诉我,额外的内存可能是ImageMagick加载解释器等时的开销,但我对Unix程序不是非常熟悉,因此在该部门没有任何线索

如果有人能解释为什么会发生这种情况,那就太好了。如果这是正常的事情,那就太好了。我会调整一些东西,以考虑到它可能会使用我的限制加上一定数量的事实,但如果不是,并且
-limit
参数不会将内存限制在一定数量,那么在ImageMagick中使用该参数到底有什么意义


再次感谢您的帮助,我们将一如既往地感谢您。

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

文件的值以文件数为单位。磁盘限制已被取消 千兆字节和其他资源的值以兆字节为单位。通过 默认限制为768个文件、1024MB内存、4096MB映射和 无限磁盘,但在平台上启动时会对其进行调整 可以提供有关可用资源的信息。当极限 到达后,ImageMagick将以某种方式失败,或者 如有可能,采取补偿措施。例如,-限制内存32-限制 当像素缓存达到内存限制时,映射64将限制内存 使用内存映射。当达到该限制时,它进入磁盘。如果 磁盘有硬限制,程序将失败


这些限制仅影响ImageMagick的像素缓存。程序代码以及库/代理为加载或处理图像而可能执行的任何操作都完全不受这些设置的影响

如果不在顶部指定要查看的内容,则正确的列显然是RES或RSIZE。对于20MiB这样的小限制,程序和库代码将占驻留集大小的很大一部分


要验证您使用的环境变量单位是否正确,请使用
identifite-list resource
。如果内存像素缓存的大小(MAGICK_memory_LIMIT)不足以存储图像,则将使用mmap ed文件(MAGICK_MAP_LIMIT),如果该限制过低,则使用常规磁盘文件(MAGICK_disk_LIMIT)。如果所有限制都太低,ImageMagick将立即失败,并出现一个错误,例如
缓存资源耗尽
内存分配失败
损坏图像

没有人知道吗?这不是一个大问题,但如果有人能对此有所了解,我会很高兴。我肯定有足够的磁盘空间(50GB+),但它似乎仍在使用通过-limit参数设置的数量。我也很抱歉在评论中出现了很大的延迟,我忘了我问了这个问题,因为ImageMagick似乎正在运行,尽管这仍然是一个问题。请尝试从svn安装,也许你的版本有问题?我相信它与我的主机使用的系统有关。后来我搬到了另一台主机上,在那里我可以自己安装ImageMagik,从那以后我一直在工作,没有任何问题。因此,使用的额外内存可能确实是库本身加载到内存中,额外的10MB是否合适?我在看RES,它通常会在我设定的限制上额外增加8-10MB,所以我只是假设这是程序开销&我已经调整了服务器内存以适应它。谢谢你的回答。