历史上,HotSpot在码头容器中运行的记录很差,错误地判断了所分配的资源(例如RAM)。然而,情况正在缓慢改善。
OpenJ9如何与坞容器对齐,以及它在多大程度上了解容器提供的资源(内存、套接字、线程等)
此外,在JavaOne 2017演示文稿中,有人提到OpenJ9可以在不同的OpenJ9 VM之间缓存jit编译的类。当VM被限制在不同的容器(或)时,这个共享缓存是可能的,如果容器化JVM共享一个码头卷?
发布于 2017-10-17 08:16:54
然后,您需要构建和运行映像,并提交结果容器,并将其作为基本映像。
docker build -t japp:latest . docker run japp docker commit container_id japp
发布于 2019-08-12 20:49:56
可以创建共享类缓存并将其包含在Docker文件中。
共享类缓存可以在dev或prod环境中创建,也可以在应用程序上运行一些测试时创建。在prod中创建缓存可能更有效,,但是在构建过程中使用测试来完成要简单得多。我用Spring应用程序对它进行了测试,甚至包括在任何新生成的Spring项目中包含的简单的"contextLoads“测试都使产生了巨大的不同。
下面是一个使用Maven进行测试的示例,但是在不同的场景中也可以使用相同的VM选项。
1.使用启用共享类缓存的运行测试
您可以在Maven中使用尽力而为的插件,我不知道如何用Gradle完成这一工作
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>-Xquickstart -Xshareclasses:cacheDir=classCache,name=appname -Xscmx32m </argLine>
</configuration>
</plugin>VM参数:-Xquickstart -Xshareclasses:cacheDir=classCache,name=appname -Xscmx32m
您可以检查在 printStats subOption中使用了多少缓存大小,如下所示: java -jar -Xshareclasses:cacheDir=classCache、name=appname、readonly、printStats application.jar
2.向Docker映像添加预置缓存
只需将cacheDir子选项设置的目录添加到图像(在本例中为classCache )中
ADD classCache classCache由于这些文件每次都会更改,所以应该将classCache 最后添加到图像中。
使用缓存运行应用程序。
ENTRYPOINT exec java -Xquickstart -Xtune:virtualized -Xshareclasses:cacheDir=classCache,name=appname,readonly -jar application.jarVM参数:-Xquickstart -Xtune:virtualized -Xshareclasses:cacheDir=classCache,name=appname,readonly -jar application.jar
缓存可以使用classCache和name sub 指定,没有这些选项的可能会创建一个新的缓存文件夹,而忽略添加到图像中的缓存文件夹。
根据我的经验,只读选项使其速度更快一些,但严格来说并不是必要的。由于当容器被销毁时,这个缓存将被丢弃,所以没有必要持久化这些恒流。
-Xquickstart和-Xtune:virtualized选项将进一步优化容器中的启动速度。
https://stackoverflow.com/questions/46783329
复制相似问题