AWS Lambda:识别冷启动
AWS Lambda: Identifying cold starts
有没有明确的方法来识别"cold starts"?是在 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” 冷启动值。
如果您正在查看 CloudWatch 日志,您的 Lambda 函数的每个 LogGroup 代表一个单独的容器,因此该 LogGroup 的第一次调用是您的冷启动。
作为一项更新,AWS 现在以 "Init Duration" 的形式在 Cloudwatch 日志的报告部分内提供有关冷启动的可见信息。不受冷启动影响的调用不会在日志中包含此信息
Duration: 1866.19 ms Billed Duration: 1900 ms Memory Size: 512 MB Max Memory Used: 163 MB Init Duration: 2172.14 ms
有没有明确的方法来识别"cold starts"?是在 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” 冷启动值。
如果您正在查看 CloudWatch 日志,您的 Lambda 函数的每个 LogGroup 代表一个单独的容器,因此该 LogGroup 的第一次调用是您的冷启动。
作为一项更新,AWS 现在以 "Init Duration" 的形式在 Cloudwatch 日志的报告部分内提供有关冷启动的可见信息。不受冷启动影响的调用不会在日志中包含此信息
Duration: 1866.19 ms Billed Duration: 1900 ms Memory Size: 512 MB Max Memory Used: 163 MB Init Duration: 2172.14 ms