在调整php图像大小时,服务器负载会增加

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

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

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

CPU工作量

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

我需要立即解决这个问题。 如何克服这个问题。 我必须为服务器充分。 是否有任何插件为图像resize的Apache或有问题的代码。

Solutions Collecting From Web of "在调整php图像大小时,服务器负载会增加"

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

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

这就是为什么当图像被调整大小时你不能做并发请求。

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

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

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

尝试使用ImageMagick来调整大小,而不是正常的PHP函数,这可能会带来一点负担。

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

我发现这非常令人吃惊,尤其是考虑到有2个核心(尽管你没有说你使用的是什么操作系统/网络服务器)。 如果只是影响图片上传功能,那么我怀疑这可能是由于您的PHP脚本中的问题。

当然可以减少服务器在处理过程中产生的负载量。 其中大部分将涉及启动一个新的编译过程(例如通过exec)来处理图像,例如从imageMagick实用工具包 – 但不知道这是什么操作系统,是不可能给出更具体的建议。

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