【发布时间】:2021-03-17 07:41:12
【问题描述】:
我最近尝试分析 AWS Lambda 中托管的服务的一些性能问题。 分解这个问题,我意识到它只是在每个容器的第一次调用中。 在隔离问题时,我发现自己创建了一个新的测试项目来获取一个简单的示例。
Test project
(您可以克隆它,构建它mvn package,部署它sls deploy,然后通过 AWS 管理控制台对其进行测试。)
这个项目有 2 个 AWS Lambda 函数:source 和 target。
target 函数只返回一个空的 json {}。
source 函数使用 AWS Lambda 开发工具包调用 target 函数。
target 函数的大致持续时间在冷启动时为 300-350 毫秒,在热调用时为 1 毫秒。
source 函数在冷启动时的大致持续时间为 6000-6300 毫秒,在热调用时为 280 毫秒。
source 函数冷启动的 6 秒开销似乎是获取客户端的 3 秒和调用另一个函数的 3 秒,热调用分别为 3 毫秒和 250 毫秒。
对于 AWS SNS 等其他服务,我的时间也差不多。
我真的不明白这 6 秒内它在做什么,以及我能做些什么来避免它。 在进行预热调用时,我可以获取客户端并存储引用以避免前几秒,但其他几秒来自实际使用其他服务(SNS、Lambda 等),我不能真正做到这一点无操作。
那么,其他人是否经历相同的冷启动持续时间,我可以做些什么来提高性能? (除了设置内存)
【问题讨论】:
-
我建议您使用 AWS X-Ray。这可能会让您有更深入的了解。
-
您的测试代码调用了 Lambda - 这对于确定 Lambda 代码为何表现不佳没有用处。 Lambda 中的代码在哪里?
-
两个 lambdas 中的代码都在测试项目中。目标 lambda 只打印“invoked”,然后返回一个空的 json 对象“{}”。测试的主要目标是弄清楚如何优化调用不同 lambda 函数的过程,所以我认为调用一个简单的“hello-world”lambda 是最准确的测试
标签: java amazon-web-services aws-lambda serverless-framework cold-start