Php AmazonS3高CPU使用率

Php AmazonS3高CPU使用率,php,amazon-web-services,amazon-s3,Php,Amazon Web Services,Amazon S3,我正在使用AmazonS3的PHPSDK将巨大的压缩文件上传到bucket中 $s3 = S3Client::factory(array( ... )); $uploader = new MultipartUploader($s3, $file, array( 'bucket' => $bucket, 'key' => $filebase )); $result = $uploader->upload(); 然而,这占用了很高的CPU使用率,

我正在使用AmazonS3的PHPSDK将巨大的压缩文件上传到bucket中

$s3 = S3Client::factory(array(
    ...
));

$uploader = new MultipartUploader($s3, $file, array(
    'bucket' => $bucket,
    'key'    => $filebase
));

$result = $uploader->upload();
然而,这占用了很高的CPU使用率,导致我的网站在这些时候运行缓慢


我有没有办法使用某种“ionice”,或者控制上传速率,这样就不会影响用户的性能?

您可以尝试在
睡眠状态下工作($s)编码到上载脚本中。然后每隔一段时间将其设置为睡眠。但是,这样脚本将花费更长的时间。特别是对于大文件。

AWS提供了流包装器,您可以在S3客户端注册它。流包装器以块的形式发送数据,您还可以控制块的大小

// Register the stream wrapper from an S3Client object
$client->registerStreamWrapper();
您可以使用fopen()和“w”、“x”或“a”流访问模式通过流式传输数据上传较大的文件。AmazonS3流包装器不支持同时读写流(例如,“r+”、“w+”等)。这是因为HTTP协议不允许同时读写

$read = fopen('<YOUR FILE>', 'r');
$stream = fopen('s3://bucket/key', 'w');
 while (!feof($read)) {
    // Read 1024 bytes from the stream
    $content = fread($read, 1024);
    fwrite($stream, $content);
}
fclose($read);
fclose($stream);
$read=fopen(''r');
$stream=fopen('s3://bucket/key','w');
而(!feof($read)){
//从流中读取1024字节
$content=fread($read,1024);
fwrite($stream,$content);
}
fclose($read);
fclose($流);
可能还有其他一些用于PHP的预构建包,可以将流上载到S3。我只能想


提供了AWS流包装器的完整文档

看起来像是在做繁重的工作并消耗大量资源(CPU、网络)。如果需要上传功能,我会考虑将其移动到SPOT实例。它们价格便宜,专为这类作业设计(启动、执行一些繁重的任务、终止)。

上传文件需要计算文件部分的SHA-256哈希作为请求签名的一部分,因此CPU利用率很高。。。当然,对于“巨大”的文件,会有更多的。“巨大”有多大?谢谢@Michael sqlbot。一个文件是42GB,另一个是90GB。其他文件要小得多。Hi。我已经在循环中有了一个“sleep()”,它会从停止的地方继续重新尝试(因为大文件超时)。然而,我不能在上传文件时睡觉,这需要很高的CPU。