我在rails应用程序上使用Imagemagick(使用rmagick)但我的服务器(Ubuntu)不是很大,当我启动转换过程时Imagemagick占用我服务器的所有位置/内存(30GB) HDD)。
我想限制内存和tmp文件大小,我该怎么办?
答案 0 :(得分:3)
尝试运行命令
identify -list resource
查看您可以控制/限制的资源。它给出了这个:
Resource limits:
Width: 214.7MP
Height: 214.7MP
Area: 4.295GP
Memory: 2GiB <--- Default is 2 GiB
Map: 4GiB
Disk: unlimited
File: 1920
Thread: 1
Throttle: 0
Time: unlimited
然后,您可以使用convert
和identify
以及mogrify
identify -limit memory 1GiB -list resource
Resource limits:
Width: 214.7MP
Height: 214.7MP
Area: 4.295GP
Memory: 1GiB <--- 1 GiB for duration of this command
Map: 4GiB
Disk: unlimited
File: 1920
Thread: 1
Throttle: 0
Time: unlimited
因此,正如您在上面所看到的,我将一个命令的内存限制为1GB。
同样,您可以使用
限制convert
的内存
convert -limit memory 1GiB -size ... file.png
您还可以在环境变量中设置内存限制,单次拍摄,如下所示:
MAGICK_MEMORY_LIMIT=30000 identify -list resource
Resource limits:
Width: 214.7MP
Height: 214.7MP
Area: 4.295GP
Memory: 29.3KiB
Map: 4GiB
Disk: unlimited
File: 1920
Thread: 1
Throttle: 0
Time: unlimited
或者在剩下的会话中这样:
export MAGICK_MEMORY_LIMIT=500000
identify -list resource
Resource limits:
Width: 214.7MP
Height: 214.7MP
Area: 4.295GP
Memory: 488KiB
Map: 4GiB
Disk: unlimited
File: 1920
Thread: 1
Throttle: 0
Time: unlimited
Kurt还提供了一些很好的建议here。
答案 1 :(得分:0)
$ man ulimit
阅读 -f 条目并执行:
$ ulimit -f 1024000
$ convert blah blah blah
$ ulimit -f <usual-value>
应将 convert 进程限制为编写1G文件。务必在之后恢复原始值。