1

我正在使用 AWS 提供的 java SDK 开发 AWS Lambda。我需要从 S3 存储桶中获取对象。我为它使用了一个 S3Client(使用 apache HTTP 作为自定义配置)时间是可以接受的。

现在我希望用 S3AsyncClient (netty) 替换我的 S3Client。我使用 AWS 文档中解释的自定义配置。

我已经定义了一个 StopWatch 来计算完整的 lambda 处理时间。我可以看到一些改进:

总时间:254.4 毫秒(来自我的秒表)

但是 AWS 增加了 +/- 2250 毫秒的计费时间!

16:34:22 结束请求 ID:3a8a2313-f3c7-4933-85a3-2f18e8876364 16:34:22 报告请求 ID:3a8a2313-f3c7-4933-85a3-2f18e8876364 持续时间:2460.98 毫秒计费持续时间:2500 毫秒

所以我付出了很多!

这种差异从何而来?我认为一些 netty/executor 线程会一直处于 WAITING STATE 状态,然后 AWS 会杀死它们……但不确定……

我已经配置了我的执行器服务。最后,对于我的 lambda,我尝试使用 executor.shutdown(); 停止所有线程。但这并没有改变任何东西...

作为 S3AsyncClient 扩展 AutoCloseable,我在 try with resources 语句中定义了它。

我准确地说它发生在冷/热启动时。

需要一些帮助来理解这种行为......?

谢谢

4

0 回答 0