阅读更多
有台旧机器上跑了个裁图的程序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 的冲突