问题
imagemagick在某种场景下会狂写/tmp目录,文件名形如magick-xxxxxxxx,
ls -lh查看这些文件达到几百G,
du -sh查看则只有几十M
被这个问题折磨了许久,大晚上收报警、出去玩收报警的感觉你懂的。。。
忍够了!!!
原因
google发现imagemagick的资源管理](Cache Storage and Resource Requirements章节):
http://www.imagemagick.org/script/architecture.php
引用
imagemagick内部有个帧缓存(pixel cache),用于提升存储和处理速度,其大小与图片的尺寸、位深正相关。随着图片尺寸的增大,其存储介质会做出相应调整:
- 通常情况下,只会在堆内存中处理图片
- 堆内存不够用时,帧缓存使用anonymous map
- anonymous map不够用时,使用硬盘作为帧缓存,并硬盘映射到内存中
- 内存映射所需内存仍不够用时,只能使用磁盘作为缓存,其性能严重依赖磁盘IO性能
至于使用哪个缓存介质是由Imagemagick依据所配置的资源限制参数来自动决定的,我们可以修改这些参数,但修改这几个参数都只是缓解症状,无法避免图片较大时还是要写硬盘。
解决方案
阅读代码发现可以通过三种方式修改临时文件存放目录:
注册表
convert -define registry:temporary-path=/data/tmp logo: -resize 250000x250000 logo.miff
环境变量
policy.xml
遗憾的是,基于php imagick扩展无法修改帧缓存目录,三种方案均依赖于系统环境配置。好在我们的php框架可以方便的设定环境变量,算是巧妙地将所依赖的环境控制在项目范围内
PS:
imagemagick选择帧缓存目录相关源码:
//magick/resource.c
(void) CopyMagickString(path,"magick-XXXXXXXX",MaxTextExtent);
exception=AcquireExceptionInfo();
directory=(char *) GetImageRegistry(StringRegistryType,"temporary-path",
exception);
exception=DestroyExceptionInfo(exception);
if (directory == (char *) NULL)
directory=GetEnvironmentValue("MAGICK_TEMPORARY_PATH");
printf("tmp path:%s\n",directory);
if (directory == (char *) NULL)
directory=GetEnvironmentValue("MAGICK_TMPDIR");
if (directory == (char *) NULL)
directory=GetPolicyValue("temporary-path");
分享到:
相关推荐
构建适用于Android的ImageMagick 制作工具链 $ ./build/tools/make-standalone-toolchain.sh --platform=android-19 --ndk-dir=/pathto/ndk/android-ndk-r9c --install-dir=/tmp/ig/arm-19-toolchain $ ./build/...
注:资源包中包含了必要的.tar.gz安装包,ImageMagick-6.5太大了点,自己去官网下载 Jmagick包中的Changelog.txt中有ImageMagick与JMagick版本对应的关系的说明 ) 安装说明: ================================== cd /...
这个特定的版本是"ImageMagick-7.1.1-21-Q16-x86-dll.exe",它针对的是Windows 32位系统,并且支持16位每像素组件的动态处理。 1. **ImageMagick**: ImageMagick是一款跨平台的命令行工具,也可以通过API集成到其他...
此扩展的初衷是要读取其他文档格式,但是当我们与ImageMagick集成时,将来我们将成为附加功能,以充分利用该功能。 首次与扩展程序互动时,会初始化几秒钟,然后从那里开始,所有图像都应加载得相对较快。 阅读其他...
这个“ImageMagick-7-Q16-x64-dll完整安装包”显然是ImageMagick的一个特定版本,适用于64位系统,并且包含动态链接库(DLL)文件,这意味着它可能包含了所有必要的组件,以便用户能够在Windows环境下运行和利用其...
ImageMagick是一款强大的开源跨平台图像处理工具,广泛应用于各种操作系统,包括Windows、Linux和macOS等。这个压缩包“ImageMagick 7.0.7 Q16 (64-bit) Setup.zip”包含了适用于64位系统的ImageMagick 7.0.7版本的...
--with-imagick=/usr/local/imagemagick \ --with-config-file-path=/usr/local/php \ --with-mysql=/usr/local/mysql/ \ --with-gd \ --enable-gd-native-ttf \ --enable-gd-jis-conv \ --with-libxml-dir=/usr/...
ImageMagick-6.9.3-7-Q16-x64-dll.exe ,又要其他版本的可以私信我,我帮你找找看
ImageMagick-7.1.0-23-Q16-HDRI-x64-dll
ImageMagick是一套功能强大、稳定而且免费的工具集和开发包,可以用来读、写和处理超过89种基本格式的图片文件,包括流行的TIFF、JPEG、GIF、 PNG、PDF以及PhotoCD等格式。利用ImageMagick,你可以根据web应用程序的...
ImageMagick的WebAssembly库:Magick.WASM ImageMagick是功能强大的图像处理库,支持超过(不包括子格式)。 使用Magick.WASM,您可以在Web应用程序中使用ImageMagick,而无需对api进行回调。 文献资料 有关如何...
较低版本的imagemagick,使用 imagemagick的扩展库必须使用比扩展库低的版本才行,包含三个版本。...ImageMagick-6.8.9-6-Q16-x86-dll_.exe ImageMagick-6.9.2-1-Q16-x64-dll.exe ImageMagick-6.9.3-7-vc14-x86.zip
node-imagemagick-native, NodeJS的ImageMagick绑定的Magick node-imagemagick-native/of 节点的Magick 绑定的 。功能C/C Magick 库的本机绑定异步。同步。流和承诺 API支持 convert,identify,composite 和其他实
ImageMagick-6.9.2-1-Q16-x64-dll.exe
在"ImageMagick-7.0.7-11-vc15-x64.zip"压缩包内,我们可以看到以下主要组成部分: 1. **LICENSE**:这是ImageMagick的许可文件,它遵循Apache 2.0许可证,意味着你可以自由地使用、修改和分发该软件,但需遵守一定...
ImageMagick-7.0.8-56-Q16-x64-dll.rar是ImageMagick7.0.8的windows 64位操作系统的安装程序,解压执行即可安装。 使用ImageMagick的创建,编辑,撰写,或转换位图图像。它可以读取和写入各种格式(超过200种)的...
在标题提到的版本“ImageMagick-6.9.11-16.tar.gz”中,我们看到的是一个压缩包文件,其格式为tar.gz,这是一种常见的Linux/Unix系统中的归档和压缩格式。 ImageMagick的主要功能包括但不限于以下几点: 1. 图像...
yum install libjpeg libjpeg-devel libpng libpng-devel ImageMagick ImageMagick-devel libmcrypt libmcrypt-devel gd gd-devel libtool-ltdl-devel ncurses-devel bison-devel libaio-devel gcc-c++ ``` 接下来...
ImageMagick-6.9.3-7-vc11-x64.zip这个压缩包是专为64位Windows系统设计的,与Visual C++ 11编译器兼容。这意味着它可能已经包含了所有必要的运行时库,以便在安装了相应VC++ Redistributable的系统上运行。 `...
ImageMagick-6.7.6-9-Q16-windows-dll.exe.rar ImageMagick-6.7.6-9-Q16-windows-dll.exe.rar ImageMagick-6.7.6-9-Q16-windows-dll.exe.rar ImageMagick-6.7.6-9-Q16-windows-dll.exe.rar ImageMagick-6.7.6-9-Q16-...