在php映像调整大小期间,服

时间:2011-09-09 11:20:42

标签: php apache optimization image-processing

我有一个PHP脚本,可以在上传时将图像大小调整为三种不同的分辨率。当我上传图像时,它会将其大小调整为300 * 300,80 * 80,800 * 800并保存原始文件。

我使用的脚本是以下链接https://github.com/blueimp/jQuery-File-Upload/blob/master/example/upload.php

以下图像是服务器的系统监视器。 CPU历史记录的前两个峰值是单独上载文件时发生的图像大小调整。以下是从队列中上传的文件。

CPU WORKLOAD

在此上传过程中,服务器无法处理其他请求。我当时无法访问其他页面。页面加载一半或根本没有加载,或者一旦上传完成就加载页面。

我需要立即解决这个问题。如何克服这个问题。我必须为服务器充分。是否有任何用于图像调整大小的apache插件或代码有问题。

3 个答案:

答案 0 :(得分:10)

即使调整图像大小在一分钟内占用了100%的CPU,仍然可以执行其他请求:您在多任务操作系统上使用多进程服务器(并且可能还有多个内核)。 / p>

但是,当您启动PHP会话时,会话被锁定:尝试使用同一会话的其他请求必须等到第一个请求结束

这就是在调整图像大小时无法执行并发请求的原因。

您必须在进行长时间处理之前关闭会话(并最终在此之后重新打开)。

所以,这应该可以解决你的问题:

session_write_close();
resize_the_image();
session_start();

答案 1 :(得分:1)

尝试使用ImageMagick调整大小而不是普通的PHP函数,这可能会减轻负载。

答案 2 :(得分:0)

  

在此上传过程中,服务器无法处理其他请求

我发现这非常令人惊讶,特别是考虑到有2个内核(尽管您没有说明您正在使用的操作系统/网络服务器)。如果它只是受影响的图像上传功能,那么我怀疑它可能是由于PHP脚本中的问题。

当然可以减少处理期间服务器生成的负载量。这些中的大多数将涉及开始新的编译过程(例如,通过exec)来处理图像,例如,来自imageMagick实用程序包 - 但不知道这是什么操作系统,不可能给出更具体的建议。

在减少图像转换的影响方面,我会为要处理的传入图像运行一个托管队列。这将确保您只在单个核心上运行图像处理。