对于 AWS Lambdas,在冷启动方面,Java 似乎明显比其他支持的语言慢。与 JDK 8 相比,JDK 11 是否有任何性能增强,可以改善冷启动时间?
2 回答
理论上它应该通过应用程序类数据共享,它应该减少几秒钟的启动时间。启动 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
AWS Lambda 的 Java 11 Runtime 的冷启动甚至比 Java 8 更差。
对于小型 Lamda 设置(256Mb),差异约为 2 秒。请阅读https://medium.com/@filia.aleks/java-11-vs-8-performance-for-aws-lambda-c6e64ea6424