AWS Lambda:识别冷启动

Bac*_*man 4 amazon-web-services aws-lambda serverless

是否有明确的方法来识别"冷启动"?在Lambda本身的运行时,还是通过日志?我知道冷启动的特点是运行时间更长,我实际上可以看到,但我正在寻找一种明确的切割方式.如果重要的话,我正在使用Node.js.

更新:对于两个用例,下面有两个很好的答案: - 在lambda运行时识别冷启动. - 从CloudWatch日志中识别冷启动.

Mar*_*k B 12

如果您在NodeJS脚本的顶部添加一些初始化代码,您将能够在代码中告知它是一个冷启动,然后您可以记录它,如果您想在日志中看到它.例如:

var coldStart = true;
console.log("This line of code exists outside the handler, and only executes on a cold start");


exports.myHandler = function(event, context, callback) {
  if (coldStart) {
    console.log("First time the handler was called since this function was deployed in this container");
  }
  coldStart = false;

   ...

  callback(...);
}
Run Code Online (Sandbox Code Playgroud)

  • @SpiritualOverflow,或者为实例的调用次数创建一个计数器。在处理程序函数外部:`invoking_count = 0`,以及在/任何处理程序内部:`inplication_count += 1`。然后,您可以在/任何处理程序中测试“调用计数”:如果它为零,则您的实例刚刚初始化。如果它不为零,则实例会先处理事件。这甚至比我之前的评论更好 ^ 因为它会告诉您单个实例处理了多少事件。我在这个实验中使用了这个技巧:https://xebia.com/blog/til-that-aws-lambda-terminates-instances-preemptively/。 (2认同)

das*_*mug 8

如果您正在查看CloudWatch日志,则Lambda函数的每个LogGroup都代表一个单独的容器,因此该LogGroup的第一次调用就是您的冷启动.

  • @olpa我向Yan Cui [这里](https://medium.com/@dashmug/thanks-for-responding-ce41bafc9e88)提出了同样的问题,我得到了这个[回复](https://medium.com/@ theburningmonk /是否有或未调用重叠-内式相同容器是-A-不同-问题对是否-API-e8f37d712340).似乎它没有记录,但是亚马逊的某个人证实了这一点.我可以根据经验证实,在CloudWatch LogGroup的开头可以看到在冷启动期间记录某些内容. (3认同)

qkh*_*pro 8

作为更新,AWS 现在在 Cloudwatch 日志的报告部分内以“Init Duration”的形式提供有关冷启动的可见信息。不受冷启动影响的调用不会在日志中包含此信息

持续时间:1866.19 毫秒计费持续时间:1900 毫秒内存大小:512 MB 已用最大内存:163 MB 初始化持续时间:2172.14 毫秒