目前我正在使用微服务和Docker-Container进行测试。在我最后一次尝试使用Micronaut-Server时,我看到了启动本地(cmd(和启动Docker之间的启动时间之间的差异。 但让我好奇的是,容器的速度要快得多。
我正在使用 Gradle 创建一个可运行的罐子(更准确地说是一个影子罐 - 不确定确切的区别是什么(。然后我用那个jar文件构建一个Docker-Image。 两者的启动命令是相同的(请参阅下面的 Dockerfile(:java -jar micronaut.jar
在我寻找原因的过程中,我发现了这个问题,这也是关于Docker-Container的性能,但结论更多,容器应该稍微慢一点,而不是更快。
我的 Dockerfile:
FROM adoptopenjdk/openjdk11-openj9:jdk-11.0.1.13-alpine-slim
COPY build/libs/*.jar micronaut.jar
EXPOSE 8080
CMD java -jar micronaut.jar
和 docker 命令:docker run -p 9999:9999 -it --name dokuserver pge/dokuserver:0.1
我预计容器的启动时间会慢一点,但实际上时间是
。- 本地:4000-5000ms
- 点测器:~2500ms
我尝试了几次,但结果总是几乎相同。
我正在使用带有DockerDesktop(Docker 19.03.1(,IntelliJ和Gradle(5.5.1(的Win10 PC,并使用IntelliJ-Terminal和windows-cmd进行本地启动。
我不是Docker或更接近硬件的事情的专家,所以我找不到这种速度差异的答案。所以我问你:
是什么原因造成的?
AdoptOpenJDK具有两种不同的JVM:HotSpot和OpenJ9
。HotSpot和OpenJ9是完全不同的JVM实现,具有不同的JIT编译器,GC算法和内部架构。
正如您的 docker 文件所建议的那样,您正在使用adoptopenjdk/openjdk11-openj9:jdk-11.0.1.13-alpine-slim
这是一个名称建议基于OpenJ9
。在Windows上,你可能会使用基于HotSpot的JVM(java -version
确定(。
OpenJ9的编译器优化不那么激进,因此启动时间的差异并不奇怪。