【问题标题】:AWS Lambda, billed time longer than processing timeAWS Lambda,计费时间长于处理时间
【发布时间】:2018-12-24 06:20:46
【问题描述】:

在我的 Lambda 函数 (Node.js) 中,我测量了从函数开始到函数结束的时间,大约为 1400 毫秒。但是,lambda 给我的计费持续时间是 2800 毫秒。

这正常吗?这种高差异的原因可能是什么(基本上是两倍)?

这是我用来测量的代码

exports.handler = function(event, context, callback) {
    let time = new Date();

    ... some logic runs ...

    console.log(`{new Date().getTime() - time.getTime()}`);
    callback(null, response);
}

【问题讨论】:

  • callback() 是做什么的?你在 记录时间 之后调用它
  • 在 NodeJS 中,当您调用 Lambda 回调函数时,您只是告诉 Lambda 服务,一旦 NodeJS 事件循环为空,它就可以关闭调用。如果您希望 Lambda 函数立即退出,您需要在调用回调之前进行以下设置:context.callbackWaitsForEmtpyEventLoop = false;
  • 谢谢!这已经困扰我好几天了。

标签: javascript node.js amazon-web-services aws-lambda latency


【解决方案1】:

与 cmets 一样,所有功劳归于 Mark B。

解决方法是添加一行:

context.callbackWaitsForEmptyEventLoop = false;

原因是 AWS Lambda 默认情况下,对于 Node.js 部署,会等待事件循环为空后再返回。因此,如果您可以设置上述行来防止这种情况发生。

【讨论】:

  • 请注意,您还应该努力了解在您的代码中是什么使这变得必要...因为除非您在事件循环中留下一些东西,否则它为空到您调用回调时,更改此值不会产生任何影响。在不了解原因的情况下设置它可能会掩盖错误。
猜你喜欢
  • 2013-11-09
  • 1970-01-01
  • 2020-02-13
  • 2017-09-02
  • 2021-06-28
  • 2020-05-18
  • 2017-10-05
  • 1970-01-01
  • 2021-10-13
相关资源
最近更新 更多