1

对于 AWS Lambdas,在冷启动方面,Java 似乎明显比其他支持的语言慢。与 JDK 8 相比,JDK 11 是否有任何性能增强,可以改善冷启动时间?

4

2 回答 2

1

理论上它应该通过应用程序类数据共享,它应该减少几秒钟的启动时间。启动 JVM 时通过“--Xshare:on”启用类数据共享。

aws 默认为 J11 运行时启用“--Xshare:on”,启用此标志的唯一原因是他们使用 JDK 附带的类列表生成了存档。

应用程序类的应用程序类数据共享首先在 J9 中引入,并且是一项仅在 OpenJDK 10 中可用的商业功能。

如果您想使用 OpenJdk 11 测试这个对您的 lambda 函数的影响,那么您将运行

java -Xshare:dump

然后在您的 $JAVA_HOME/lib/server 中,您应该会看到 jdk 归档 classes.jsa,如下所示

在此处输入图像描述

然后你会用标志运行你的测试

java -Xshare:on ....

jvm 将从这个存档加载 jdk 类
以运行本地 lambda 测试这个 docker 容器集合是一个不错的选择
https://github.com/lambci/docker-lambda

于 2019-11-26T21:31:43.160 回答
1

AWS Lambda 的 Java 11 Runtime 的冷启动甚至比 Java 8 更差。

对于小型 Lamda 设置(256Mb),差异约为 2 秒。请阅读https://medium.com/@filia.aleks/java-11-vs-8-performance-for-aws-lambda-c6e64ea6424

于 2020-04-20T13:04:27.627 回答