簡體   English   中英

AWS S3 泄漏連接

[英]AWS S3 leaking connections

我正在嘗試創建一個 expressjs 應用程序,它通過 HTTP 從 S3 流式傳輸對象。

我的問題是,在負載開始后大約一分鍾的高負載下,請求開始超時。 使用lsof -p <pid>檢查來自 nodejs 進程的打開連接時,我可以看到該進程與 AWS 有 50 個打開連接。 (文檔指出這是來自 AWS SDK 的默認最大連接數。)

問題:如何關閉或重新使用打開的 AWS 連接以通過 HTTP 繼續服務對象?

(希望)最小的工作示例

var express = require('express');
var app = express();

app.get('/', function (req, res) {
     // [ some code to create the bucket key ]
    
    const params = {
        'Bucket' : BUCKET,
        'Key' : '<objectkey>'
    }

    stream = s3.getObject(params).on('httpHeaders', function (statusCode, headers) {
        res.set('Content-Length', headers['content-length']);
        res.set('Content-Type', headers['content-type']);
        this.response.httpResponse.createUnbufferedStream()
            .pipe(res);
    })
    .send();
}

app.listen(3000, function () {
    console.log('Example app listening on port 3000!');
});

編輯:

對我來說,我不知道pipe()可能做錯了什么,但是即使經過數萬次請求,以下代碼也不會卡住:

var stream = s3.getObject(params).createReadStream()

stream.on('readable', () => {
    data = stream.read()
    if (data == null) {
        return;
    }

    res.write(data);
});

stream.on('end', () => {
    res.end();
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM