为什么AWS Lambda中的Node.js占用这么多内存?

我正在使用TesseractJS在AWS Lambda中运行OCR处理function。 我不得不将lambda函数的内存增加到最大(1536 MB),因为内存问题它不会崩溃。 即便如此,这个过程几乎达到了最高限度:

Duration: 54133.61 ms Billed Duration: 54200 ms Memory Size: 1536 MB Max Memory Used: 1220 MB 

奇怪的事情,以及我发布这个问题的原因是为什么这是如此的记忆? 如果我在只有512MB内存的开发环境中运行这个相同的进程,它仍然可以完成而没有任何问题。

我用于这些testing的图像大概只有大约350KB。

这是我的代码片段:

 Tesseract.recognize(img) .catch(err => reject(err)) .then(function(result) { Tesseract.terminate(); console.log(result); })); }); 

这里是我的代码更完整的版本:

lambda.js:

 exports.handler = function(event, context, callback) { let snsMessage = getSNSMessageObject( JSON.stringify(event.Records[0].Sns.Message)); let bucket = snsMessage.Records[0].s3.bucket.name; let key = snsMessage.Records[0].s3.object.key; let bookId = key.split('.')[0].split('/')[0]; let pageNum = key.split('.')[0].split('/')[1]; s3.getImage(bucket, key) .then(function(data) { return ocr.recognizeImage(data.Body); }) .then(function(result) { return s3.uploadOCR(bucket, bookId, pageNum, result); }) .then(fulfilled => callback(null)) .catch(error => callback(error, 'Error')); }; 

帮手function:

  getImage: function getImage(bucket, key) { // Obtener la imagen de S3 let params = {Bucket: bucket, Key: key}; return s3.getObject(params).promise(); }, uploadOCR: function uploadOCR(bucket, bookId, pageNum, ocr) { // Subir el OCR JSON a S3 let params = { Bucket: bucket, Key: (bookId + '/' + pageNum + '.json'), Body: ocr, ContentType: 'application/json' }; return s3.putObject(params).promise(); } recognizeImage: function recognizeImage(img) { return new Promise(function(resolve, reject) { // Procesar con TesseractJS Tesseract.recognize(img) .catch(err => reject(err)) .then(function(result) { Tesseract.terminate(); let ocr = {}; ocr['paragraphs'] = result.paragraphs.map( p => ({'bbox': p.bbox, 'baseline': p.baseline, 'lines': p.lines.map( l => ({'bbox': l.bbox, 'baseline': l.baseline, 'words': l.words.map( w => ({'text': w.text, 'bbox': w.bbox, 'baseline': w.baseline})) })) })); resolve(JSON.stringify(ocr)); }); });