基本上我试图在我的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中拥有该参数的重点是什么?
再次感谢你的帮助,我们一如既往地非常感谢。
答案 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 exhausted
,Memory allocation failed
或corrupt image
。