Imagick Memory& CPU限制

时间:2012-04-24 11:00:48

标签: php cpu-usage imagick

我正在使用Imagick最新版本& PHP 5.3。当我尝试为图像创建缩略图(下面的代码)时,脚本使用了太多的CPU。如何在Imagick上设置资源消耗限制?

$thumb = new Imagick();
$thumb->readImage($this->tmp_file);
$thumb->thumbnailImage(200, null);
$thumb->writeImage($this->thumb_file);
$thumb->destroy();

感谢。

3 个答案:

答案 0 :(得分:0)

你想做什么?如果您在每次用户访问页面时尝试创建缩略图,您将很快在CPU上创建非常繁重的负载。您可以通过仅生成一次图像并将其保存到缩略图目录来解决此问题。

您还可以使用PHP.ini或ini_set命令将PHP设置为具有特定的内存限制。请参阅herehere

我不认为你可以在imagemagick中专门设置内存限制,除非你自己设置命令行参数(最后回答here

答案 1 :(得分:0)

我的建议

一个。利用缓存

B中。不要一直生成Thumb

℃。使用Gearmanbeanstalkd等作业排队系统生成大拇指,这样您就不必立即执行此操作

示例仅在原始文件被修改时生成拇指

$file = "a.jpg" ;
$thumbFile = "a.thumb.jpg" ;
$createThumb = true;
if(is_file($thumbFile))
{
    if((filemtime($file) - 10) < filemtime($thumbFile));
    {
        $createThumb = false;
    }
}


if($createThumb === true)
{
    $thumb = new Imagick();
    $thumb->readImage($file);
    $thumb->thumbnailImage(50, null);
    $thumb->writeImage($thumbFile);
    $thumb->destroy();
}

答案 2 :(得分:0)

我相信您可以使用setResourceLimit更改Imagick的限额:

Imagick::setResourceLimit( $type, $limit );

可用的类型常量:

Imagick::RESOURCETYPE_AREA
Imagick::RESOURCETYPE_DISK
Imagick::RESOURCETYPE_FILE
Imagick::RESOURCETYPE_MAP
Imagick::RESOURCETYPE_MEMORY

使用上面列出的相同常量,您可以查看getResourceLimit当前正在使用的限制之一:

Imagick::getResourceLimit( $type )