ImageMagick的convert命令占用cpu过高

阅读更多
有台旧机器上跑了个裁图的程序ImageMagick,迁移到新机器之后居然跑不动,情况如下:

新机器:  DELL R710    操作系统版本:6.2     ImageMagick版本:6.5.4       convert占用cpu很高            文件系统使用了ext4
旧机器:  HP DL360G5    操作系统版本:5.2     ImageMagick版本:6.0.1       convert占用cpu很低            文件系统ext3

新机器的负载情况:
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                 
7535 apache    20   0 1174m 3260 1960 D 233.8  0.0   0:01.21 /usr/local/bin/convert -strip -resize 95x120> -quality 9
7552 apache    20   0 1110m 3188 1956 R 230.0  0.0   0:01.19 /usr/local/bin/convert -strip -resize 100x75> -quality 9
7584 apache    20   0 1110m 3168 1932 D 183.6  0.0   0:00.95 /usr/local/bin/convert -strip -resize 100x75> -quality 9
7583 apache    20   0 1110m 3176 1936 D 172.0  0.0   0:00.89 /usr/local/bin/convert -strip -resize 100x75> -quality 9
7600 apache    20   0 1174m 3284 1960 D 125.6  0.0   0:00.65 /usr/local/bin/convert -strip -resize 95x120> -quality 9
7632 apache    20   0 1175m  10m 1932 D 121.8  0.0   0:00.63 /usr/local/bin/convert -strip -resize 400x300> -quality
7601 apache    20   0  733m 9.8m 1956 D 81.2  0.0   0:00.42 /usr/local/bin/convert -strip -resize 180x120> -quality 9 


刚开始怀疑版本问题,安装最新版ImageMagick,效果也不明显,cpu占用还是挺高
后来经过strace跟踪处理过程,发现新旧版本之间的差异,就是多线程处理。
于是,发现问题在于新版本的ImageMagick启用了OpenMP,默认开启多线程处理,导致cpu占用过高。
解决办法:
重新编译ImageMagick最新版,增加了参数: --disable-openmp,负载就降下来了。
编译参数:
./configure --prefix=/usr/local/ImageMagick-6.7.9-7 --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --with-system-zlib --enable-__cxa_atexit --disable-openmp


另外,在此过程中,也有人推荐改用GraphicsMagick:http://www.graphicsmagick.org/
因为问题已经解决,就没有尝试,有兴趣的话可以去试试。
附GraphicsMagick编译参数,仅供参考
./configure --prefix=/usr/local/GraphicsMagick-1.3.16 --enable-libtool-verbose --with-included-ltdl --enable-shared --disable-static --with-modules --with-frozenpaths --without-perl --without-magick-plus-plus --with-quantum-depth=16
还有个重要的参数,根据情况选择是否增加吧,
--enable-sybol-prefix
避免和系统中已有的 ImageMagick 的冲突

你可能感兴趣的:(ImageMagick,convert,cpu)