ADJ網路實驗室
打印

[介紹] 解決 imagick 在 Centos 6.5 多線程時會導致CPU暴增到100%的方法

解決 imagick 在 Centos 6.5 多線程時會導致CPU暴增到100%的方法

PHP建圖通常都用GD庫,因為是內置的不需要在服務器上額外安裝插件,所以用起來比較省心,但是如果你的程序主要的功能就是處理圖像,
那麼就不建議用GD了,因為GD不但低效能而且能力也比較弱,佔用的系統資源也頗多,而 imagick 卻是一個很好的替代品,不過最近我把GD
改成了imagick後,還是有出現了一個問題 ,就是 imagick 多線程時會導致cpu使用率暴增到100%

這是因為 imagick 的多線程模式有一個bug,他會導致多核心的 CPU 使用率瞬間飆升到100%.所以一定要使用它的單線程模式才行.

怎樣檢查是否為多線程(有出現紅色字眼 OpenMP 就是多線程版本):
[root@imagick ~]# /usr/local/bin/convert -version
Version: ImageMagick 6.5.4-7 2014-02-10 Q16 OpenMP http://www.imagemagick.org
Copyright: Copyright (C) 1999-2009 ImageMagick Studio LLC

如果要改為單線程.在 CentOS 6.5 下目前沒有 rpm 的版本.必需使用 Compiler的方式...
底下提供一下 imagick 在 Centos6.5 的安裝方法:

1、安装ImageMagick
# yum install libtool-ltdl-devel tcl-devel libpng-devel libjpeg-devel ghostscript-devel bzip2-devel freetype-devel libtiff-devel php-devel
# cd /tmp
# wget http://soft.vpser.net/web/imagemagick/ImageMagick-7.0.5-7.tar.bz2
# tar jxvf ImageMagick-7.0.5-7.tar.bz2
# cd ImageMagick-7.0.5-7
# ./configure --prefix=/usr/local/imagemagick --enable-shared --with-modules --with-bzlib=yes --with-fontconfig=yes --with-freetype=yes --with-gslib=yes --with-gvc=yes --with-jpeg=yes --with-jp2=yes --with-png=yes --with-tiff=yes --disable-openmp
# make clean && make && make install
 
測試單線程的 ImageMagick 是否可以正常運行:
# /usr/local/imagemagick/bin/convert -version

如果看到 Features: DPC 就是單線程的版本
引用:

[root@web imagick]# /usr/local/imagemagick/bin/convert -version
Version: ImageMagick 7.0.5-7 Q16 x86_64 2017-10-31 http://www.imagemagick.org
Copyright: © 1999-2017 ImageMagick Studio LLC
License: http://www.imagemagick.org/script/license.php
Features: Cipher DPC HDRI Modules
Delegates (built-in): bzlib freetype gslib jng jpeg ltdl png ps tiff x zlib


2、安裝PHP擴展:imagick
# cd /tmp/ && wget http://pecl.php.net/get/imagick-3.6.0.tgz
# tar -zxvf imagick-3.6.0.tgz && cd imagick-3.6.0
# /usr/bin/phpize
# export PKG_CONFIG_PATH=/usr/local/imagemagick/lib/pkgconfig/
# ./configure --with-php-config=/usr/bin/php-config --with-imagick=/usr/local/imagemagick
# make clean && make && make install

3. 增加 imagick.ini 讓系統重啟可以自動載入
# vi /etc/php.d/imagick.ini
引用:

; Enable imagick extension module
extension = "imagick.so"


然後重新啟動 Nginx 就可以囉~

官方說明指南:https://www.imagemagick.org/script/advanced-unix-installation.php
參考文章:http://www.cnblogs.com/see7di/p/3758879.html





TOP

ARTERY.cn