我正在使用 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 语句中定义了它。
我准确地说它发生在冷/热启动时。
需要一些帮助来理解这种行为......?
谢谢