ImageMagick多次转换相同的图像?

在使用ImageMagick调整一些照片的大小时,我发现服务器速度变慢。 做一个htop显示有几个类似的convert命令(7)在同一个图像上同时执行。 这是正常的ImageMagick,或者我的代码以某种方式执行Imagemagick的convert时间在同一图像?

我正在使用ImageMagick ImageMagick 6.7.9-6 2012-09-18

在这里输入图像描述

转换 – 版本

 Version: ImageMagick 6.7.9-6 2012-09-18 Q16 http://www.imagemagick.org Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC Features: OpenMP 

附加信息

  • CentOS 6.3 i686系统有16个内核。
  • 典型的input图像文件大约是10-100KB。
  • 重复(不仅仅是类似的)命令的数量范围从2-16。

logging

日志显示没有重复的调用来convert两次调整相同的图像。

要调试这个,需要更多的细节。

  • “…同时有几个类似的转换命令…” :究竟有多少是几个?!

  • 这个系统有多少个CPU(内核)?

  • 如何“相似”,这种相似之处有什么区别?

  • 什么是父母:这些类似的命令之间的子女关系? ( pstree命令)

  • 你的典型输入图像有多大?

请同时报告convert -version的完整输出。

这似乎是一个网络服务,从输入JPEG的目录猜测,可以在截图中看到。 *您确定每次上传都没有几个由Web服务启动的转换命令吗? – 您确定Web 客户端没有多次联系Web服务,以便转换每个图片?


更新:

如果您的convert -version报告为OpenMP一个功能,那么您的ImageMagick是多线程的,使它能够同时运行多个线程来处理一个大的图像。 当处理大型图像文件时,这可以极大地提高效率。 (但是,如果处理很多小文件,它也会大大降低整体性能…)

我的猜测是在htop输出中看不到多个(16)并发进程 ,但是多个(16个)并发执行线程

对于处理小文件的典型用例,您应该尝试禁用自动多线程,方法是设置此环境变量:

 MAGICK_THREAD_LIMIT=1 

您还可以 ImageMagick命令进行基准测试,以更接近要使用的最佳线程数。 添加-bench iterations打印特定命令的一个或多个线程的已用时间和效率:

 convert \ -bench 40 \ /home/photos/public_html/2012/0926/some.jpg \ -resize 300 \ null: 

您的ImageMagick 6.7.9能够在对命令进行基准测试时应用渐进式线程。 (在非OpenMP安装中使用-bench测试-bench意义…)

另请参阅官方ImageMagick论坛中的讨论 。