从php5.5升级到Docker+php7.4后ImageMagick的性能非常差

分享于 

3分钟阅读

互联网

  繁體

问题:

测试脚本

为了诊断问题,我编写了以下简单脚本,并以5MB JPEG作为输入:


<?php



$image_name = "imgbench.jpeg";


$image_size = 4000;


$image_quality = 50;



$image = new Imagick();


$image->readImage($image_name);


$image->stripImage();


$image->resizeImage($image_size, $image_size, Imagick::FILTER_LANCZOS, 1, true);


$image->setImageCompressionQuality($image_quality);


$image->setInterlaceScheme(Imagick::INTERLACE_JPEG);


$image_blob = $image->getImageBlob();



有谁知道这可能是什么原因,更重要的是,如何在新系统中提高性能?

系统使用率

旧系统

在旧的系统(使用xamazon Linux AMI版本1)上,PHP的设置如下:


sudo yum install php55-pecl-imagick ...



它显示了以下信息:


$ php -i


phpinfo()


PHP Version => 5.5.38



(...)



imagick



imagick module => enabled


imagick module version => 3.4.4


imagick classes => Imagick, ImagickDraw, ImagickPixel, ImagickPixelIterator


Imagick compiled with ImageMagick version => ImageMagick 6.7.8-9 2016-06-22 Q16 http://www.imagemagick.org


Imagick using ImageMagick library version => ImageMagick 6.7.8-9 2016-06-22 Q16 http://www.imagemagick.org



新系统

新系统使用Docker (sudo yum install docker 在xamazon Linux 2)上,为PHP容器使用以下Dockerfile:


FROM php:7.4-fpm


COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/bin/


RUN install-php-extensions imagick



手动安装PHP扩展imagicklibmagickwand-dev时(没有mlocati/php-extension-installer,也存在相同的性能问题。

这提供了以下信息:


$ docker-compose exec php php -i


phpinfo()


PHP Version => 7.4.13



(...)



imagick



imagick module => enabled


imagick module version => 3.4.4


imagick classes => Imagick, ImagickDraw, ImagickPixel, ImagickPixelIterator, ImagickKernel


Imagick compiled with ImageMagick version => ImageMagick 6.9.10-23 Q16 x86_64 20190101 https://imagemagick.org


Imagick using ImageMagick library version => ImageMagick 6.9.10-23 Q16 x86_64 20190101 https://imagemagick.org




答案1:

可以通过使用php:alpine图像来解决这个问题。

具体原因尚不清楚,有关详细信息,请参阅以下问题:https://github.com/docker-library/php/issues/1100



相关文章