在使用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
附加信息
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论坛中的讨论 。