Amazon S3高CPU使用率

时间:2017-05-21 14:33:08

标签: php amazon-web-services amazon-s3

我正在使用Amazon S3的PHP SDK将巨大的压缩文件上传到存储桶中。

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

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

$result = $uploader->upload();

但是,这会占用很高的CPU,导致我的网站在这些时候变慢。

我有什么方法可以使用某种" ionice"或控制上传速率,这样它对用户的性能没有影响?

3 个答案:

答案 0 :(得分:0)

AWS提供流包装器,您可以使用S3 Client注册它。流包装器以块的形式发送数据,您还可以控制块大小。

// Register the stream wrapper from an S3Client object
$client->registerStreamWrapper();

您可以使用fopen()和“w”,“x”或“a”流访问模式通过流数据上传较大的文件。 Amazon S3流包装器不支持同时读取和写入流(例如“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);

可能还有一些其他预先构建的PHP程序包可以上传到S3。我只能想到Flysystem

提供了AWS Stream Wrapper的完整文档Here.

答案 1 :(得分:0)

看起来MultipartUploader做了大量工作并消耗了大量资源(CPU,网络)。如果需要/期望上传功能,我会考虑将其移至 spot实例。它们很便宜,专为这类工作而设计(旋转,做一些繁重的工作,终止)。

答案 2 :(得分:-1)

您可以尝试在sleep($seconds);中使用上传脚本。然后将其设置为间隔睡眠。这样,脚本将需要更长的时间。特别是大文件。