`
godlovesdog
  • 浏览: 100223 次
社区版块
存档分类
最新评论

imagemagick /tmp/magick-xxxxxxxx

阅读更多
问题
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");
    

    分享到:
    评论

    相关推荐

      ImageMagick-CommandLine-For-Android

      构建适用于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/...

      linux下安装ImageMagick-6.5+JMagick -6.4 经测试成功的

      注:资源包中包含了必要的.tar.gz安装包,ImageMagick-6.5太大了点,自己去官网下载 Jmagick包中的Changelog.txt中有ImageMagick与JMagick版本对应的关系的说明 ) 安装说明: ================================== cd /...

      ImageMagick-7.1.1-21-Q16-x86-dll.exe

      这个特定的版本是"ImageMagick-7.1.1-21-Q16-x86-dll.exe",它针对的是Windows 32位系统,并且支持16位每像素组件的动态处理。 1. **ImageMagick**: ImageMagick是一款跨平台的命令行工具,也可以通过API集成到其他...

      ImageMagick-7-Q16-x64-dll完整安装包

      这个“ImageMagick-7-Q16-x64-dll完整安装包”显然是ImageMagick的一个特定版本,适用于64位系统,并且包含动态链接库(DLL)文件,这意味着它可能包含了所有必要的组件,以便用户能够在Windows环境下运行和利用其...

      Magick-Image-Reader:Visual Studio Code的扩展,它通过Magick.WASM集成了ImageMagick。 这提供了对在Visual Studio Code中查看100多种其他文件类型的支持。 [这是来自GitLab的镜像,请与那里的存储库进行交互。]

      此扩展的初衷是要读取其他文档格式,但是当我们与ImageMagick集成时,将来我们将成为附加功能,以充分利用该功能。 首次与扩展程序互动时,会初始化几秒钟,然后从那里开始,所有图像都应加载得相对较快。 阅读其他...

      ImageMagick 7.0.7 Q16 (64-bit) Setup.zip

      ImageMagick是一款强大的开源跨平台图像处理工具,广泛应用于各种操作系统,包括Windows、Linux和macOS等。这个压缩包“ImageMagick 7.0.7 Q16 (64-bit) Setup.zip”包含了适用于64位系统的ImageMagick 7.0.7版本的...

      php 安装配置文件

      --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-7.0.1-4-Q16-x64-dll

      这个特定的版本,"ImageMagick-7.0.1-4-Q16-x64-dll",是为64位操作系统设计的,因此它只能在64位版本的Windows或Linux等系统上运行。"Q16"表示它使用了16位颜色深度,这允许处理具有更丰富色彩的图像。 ...

      ImageMagick-7.1.0-23-Q16-HDRI-x64-dll

      ImageMagick-7.1.0-23-Q16-HDRI-x64-dll

      ImageMagick-6.9.3-7-vc11-x64.zip

      ImageMagick-6.9.3-7-vc11-x64.zip这个压缩包是专为64位Windows系统设计的,与Visual C++ 11编译器兼容。这意味着它可能已经包含了所有必要的运行时库,以便在安装了相应VC++ Redistributable的系统上运行。 `...

      ImageMagick-6.9.3-7-Q16-x64-dll.exe dll版本,q16是十六位

      ImageMagick-6.9.3-7-Q16-x64-dll.exe ,又要其他版本的可以私信我,我帮你找找看

      ImageMagick-6.9.1-10-Q16-x86-dll.exe

      ImageMagick是一套功能强大、稳定而且免费的工具集和开发包,可以用来读、写和处理超过89种基本格式的图片文件,包括流行的TIFF、JPEG、GIF、 PNG、PDF以及PhotoCD等格式。利用ImageMagick,你可以根据web应用程序的...

      Imagemagick6.8.9-6.9.3

      较低版本的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

      Magick.WASM:适用于ImageMagick的WASM库

      ImageMagick的WebAssembly库:Magick.WASM ImageMagick是功能强大的图像处理库,支持超过(不包括子格式)。 使用Magick.WASM,您可以在Web应用程序中使用ImageMagick,而无需对api进行回调。 文献资料 有关如何...

      node-imagemagick-native, NodeJS的ImageMagick绑定的Magick .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-6.9.2-1-Q16-x64-dll.exe

      ImageMagick-7.0.7-11-vc15-x64.zip

      在"ImageMagick-7.0.7-11-vc15-x64.zip"压缩包内,我们可以看到以下主要组成部分: 1. **LICENSE**:这是ImageMagick的许可文件,它遵循Apache 2.0许可证,意味着你可以自由地使用、修改和分发该软件,但需遵守一定...

      ImageMagick7.0.8 win64 16安装包下载。使用moviepy抛ImageMagick异常问题解决

      ImageMagick-7.0.8-56-Q16-x64-dll.rar是ImageMagick7.0.8的windows 64位操作系统的安装程序,解压执行即可安装。 使用ImageMagick的创建,编辑,撰写,或转换位图图像。它可以读取和写入各种格式(超过200种)的...

      LAMP安装配置

      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.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-windows-dll.exe.rar ImageMagick-6.7.6-9-Q16-...

    Global site tag (gtag.js) - Google Analytics