Jump to Navigation

gmagick图片处理优化打包

在做网站的图片处理项目时,碰到系统自带的graphicmagick库与效率比较低,
导致服务器负载偶尔达到 300-500的值,这种状态服务基本不用了。
而这个图片处理系统设计的是实时图片处理,前端加varnish缓存的模式。

一旦达到这个范围的负载Load,整个服务基本处于不可用状态,
大概有70-80%的图片处理请求得不到处理,在页面上显示白页了。

这是由于在默认情况下,全部使用CPU的x86指令处理图片,不但耗CPU,而且处理速度还慢。

经过一些理论研究与摸索测试,找到了一个能够大幅优化图片处理效率的方式。

这个优化方式,着重在三点,
1)使用新版本的包,
2)使用CPU的针对图片处理的高级汇编指令
3) 使用openmp并行处理

这里主要使用了libjpeg-turbo这个处理库,这个库尽可能使用了硬件支持的专门处理图片视频的CPU扩展指令,所以效率非常高。

据其官方测试这个库处理图片的效率是系统默认libjpeg的3-5倍。

根据自己的实现项目测试,这个优化效果也非常明显。

关于这个库的详细说明详见其官方网站。

下面把这个方式的打包步骤列出如下,

相关包,libpng,giflib,libjpeg-turbo,gmagick
打包依赖包,nasm

编译命令:(prefix需替换成实际部署)
nasm-2.10.07
./configure --prefix=/usr/local/graphicsmagick/

giflib-5.0.4和libpng-1.5.15
CFLAGS="-mfpmath=sse -frename-registers -O3 -ftree-vectorize " ./configure --prefix=/usr/local/graphicsmagick

libjpeg-turbo, NASM开启SIMD指令,
NASM=/usr/local/graphicsmagick/bin/nasm CFLAGS="-mfpmath=sse -frename-registers -O3 -ftree-vectorize " ./configure --prefix=/usr/local/graphicsmagick --with-jpeg7 --with-jpeg8

graphicsaimgck-1.3.18:
CFLAGS="-I/usr/local/graphicsmagick/include -mfpmath=sse -frename-registers -O3 -ftree-vectorize -DJPEG_DEFAULT=libjpeg-turbo" LDFLAGS="-L/usr/local/graphicsmagick/lib" ./configure --prefix=/usr/local/graphicsmagick --enable-shared=yes --enable-openmp

软件源代码包下载地址:
http://downloads.sourceforge.net/project/giflib/giflib-5.x/giflib-5.0.4....

http://downloads.sourceforge.net/project/libjpeg-turbo/1.2.1/libjpeg-tur...

http://downloads.sourceforge.net/project/libpng/libpng15/1.5.15/libpng-1...

http://downloads.sourceforge.net/project/graphicsmagick/graphicsmagick/1...

http://www.nasm.us/pub/nasm/releasebuilds/2.10.07/nasm-2.10.07.tar.bz2

添加新评论

Plain text

  • 不允许HTML标记。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters shown in the image.


Main menu 2

Story | by Dr. Radut