ImageMagick如何多次转换同一张图片?

4
当我使用ImageMagick调整一些照片的大小时,我注意到我的服务器变慢了。在运行htop命令时,发现有几个类似的convert命令(7个)同时在同一张图片上执行。这种情况对于ImageMagick来说是否正常,还是我的代码在同一张图片上多次执行了Imagemagick的convert命令?我正在使用的是ImageMagick ImageMagick 6.7.9-6 2012-09-18版本。 命令:convert --version
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来两次调整同一张图片的情况。


很难看清上面的图片。不过,我建议在文本文件中记录来自您的PHP脚本的请求,并确保其中没有大致相同时间的多个条目。 - Sabeen Malik
1
更新了帖子,并附上了更大的图片链接。 - Nyxynyx
似乎是同一个命令在短时间间隔内执行了多次,尽管我不是Linux专家。值得尝试在调用imagemagick转换代码之前插入一些日志记录,以便更精确地确定到底发生了什么。 - Sabeen Malik
1
我们怎么会知道呢?没有代码可以查看,或者我的代码是否在同一张图片上执行了多次Imagemagick的转换? - Sean Bright
1
该系统有16个核心。使用htop中的过滤器,我可以看到最多16个类似的(不仅仅是相似,如果您查看发布的屏幕截图,它们完全相同)。转换命令完全相同,包括输入和输出文件。有时我只看到2个,但可能会有更多,因为我的屏幕只能显示这么多结果。 - Nyxynyx
显示剩余2条评论
1个回答

1

要调试此问题,需要更多详细信息。

  • "... 同时运行了几个类似的转换命令...":'几个' 究竟是多少?!

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

  • 这些命令有多么相似,其中的差异是什么?!

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

  • 您通常的输入图像有多大?!

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

从屏幕截图中可以看出,这似乎是一个 Web 服务。*您确定 Web 服务没有为每个上传启动多个 convert 命令吗?-- 您确定 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测试没有太多意义...)

另请参见官方ImageMagick论坛中的讨论


我在原始帖子中更新了你的问题的答案。什么是Web服务?服务器托管一个网站,该网站会频繁地对提交的照片进行缩小处理。我记录了“convert”的调用,似乎每个调整大小的图像只有1个调用。 - Nyxynyx
你运营着一个可以上传/提交照片的网站/服务器吗?这个网站/服务器会将收到的照片缩小尺寸吗?-- 有些人称之为“web service”... - Kurt Pfeifle
1
这个网站远不止是一个网络服务,不过好吧,它确实也是一个网络服务! :) - Nyxynyx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接