zoukankan      html  css  js  c++  java
  • 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依据所配置的资源限制参数来自动决定的,我们可以修改这些参数,但修改这几个参数都只是缓解症状,无法避免图片较大时还是要写硬盘。 

    解决方案 
    阅读代码发现可以通过三种方式修改临时文件存放目录: 

    • 注册表
    Shell代码  收藏代码
    1. convert -define registry:temporary-path=/data/tmp logo:  -resize 250000x250000 logo.miff  
    • 环境变量
    • policy.xml


    遗憾的是,基于php imagick扩展无法修改帧缓存目录,三种方案均依赖于系统环境配置。好在我们的php框架可以方便的设定环境变量,算是巧妙地将所依赖的环境控制在项目范围内 
    PS: 
    imagemagick选择帧缓存目录相关源码: 

    C代码  收藏代码
      1. //magick/resource.c  
      2. (void) CopyMagickString(path,"magick-XXXXXXXX",MaxTextExtent);  
      3. exception=AcquireExceptionInfo();  
      4. directory=(char *) GetImageRegistry(StringRegistryType,"temporary-path",  
      5.   exception);  
      6. exception=DestroyExceptionInfo(exception);  
      7. if (directory == (char *) NULL)  
      8.   directory=GetEnvironmentValue("MAGICK_TEMPORARY_PATH");  
      9. printf("tmp path:%s ",directory);  
      10. if (directory == (char *) NULL)  
      11.   directory=GetEnvironmentValue("MAGICK_TMPDIR");  
      12. if (directory == (char *) NULL)  
      13.   directory=GetPolicyValue("temporary-path");  
  • 相关阅读:
    将指定json格式的内容,写入文件中,构造测试数据
    shell对比用=时 记得加空格
    scp带私钥使用以及免密配置
    kafka知识补充
    根据frm和ibd文件恢复数据库表结构和数据
    登录页面 逻辑:当用户进来的时候, 全局检查一下是否有用户的信息,如果用则显示用户信息页面;没有,则显示用户登录页面
    理解Spring 容器、BeanFactory 以及 ApplicationContext
    Java 中 CAS
    volatile 关键字
    JenKins docker 集群
  • 原文地址:https://www.cnblogs.com/mfryf/p/4088215.html
Copyright © 2011-2022 走看看