是否有明确的方法来识别“冷启动”?是在 Lambda 本身的运行时,还是通过日志?我知道冷启动的特点是运行时间更长,我实际上可以看到,但我正在寻找一种明确的方式。如果这很重要,我正在使用 Node.js。
更新:对于两个用例,下面有两个很好的答案: - 在 lambda 运行时识别冷启动。- 从 CloudWatch 日志中识别冷启动。
是否有明确的方法来识别“冷启动”?是在 Lambda 本身的运行时,还是通过日志?我知道冷启动的特点是运行时间更长,我实际上可以看到,但我正在寻找一种明确的方式。如果这很重要,我正在使用 Node.js。
更新:对于两个用例,下面有两个很好的答案: - 在 lambda 运行时识别冷启动。- 从 CloudWatch 日志中识别冷启动。
如果您在 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(...);
}
更新:
如果您只关心在日志中查看冷启动,Lambda 现在会在 CloudWatch Logs 中为冷启动记录一个额外的“Init Duration”值。
作为更新,AWS 现在在 Cloudwatch 日志的报告部分中以“初始化持续时间”的形式提供有关冷启动的可见信息。未遭受冷启动的调用不会在日志中包含此信息
持续时间:1866.19 毫秒计费持续时间:1900 毫秒内存大小:512 MB 使用的最大内存:163 MB 初始化持续时间:2172.14 毫秒
如果您正在查看 CloudWatch 日志,您的 Lambda 函数的每个 LogGroup 都代表一个单独的容器,因此该 LogGroup 的第一次调用是您的冷启动。