4

使用 ImageMagick 调整某些照片的大小时,我注意到服务器速度变慢。执行 ahtop表明convert在同一图像上同时执行了几个类似的命令 (7)。这对于 ImageMagick 是否正常,或者我的代码是否以某种方式convert在同一张图像上执行了 Imagemagick 的多次?

我正在使用 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 个内核。
  • 典型的输入图像文件约为 10-100KB。
  • 重复(不仅仅是相似)命令的数量范围为 2-16。

日志记录

日志显示没有重复调用convert两次调整同一图像的大小。

4

1 回答 1

1

要调试这一点,需要更多细节。

  • “......同时有几个类似的转换命令......”:“几个”到底有多少?!

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

  • 到底有多“相似”,这种相似性有什么不同?!

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

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

另请报告convert -version.

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


更新:

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

我的猜测是您在输出中看不到多个 (16) 个并发进程htop,而是多个 (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 能够在对命令进行基准测试时应用渐进式线程。-bench(在非 OpenMP 安装中进行测试没有多大意义......)

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

于 2012-09-26T18:35:20.703 回答