首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenJ9和码头集装箱?

OpenJ9和码头集装箱?
EN

Stack Overflow用户
提问于 2017-10-17 05:53:02
回答 2查看 1.4K关注 0票数 5

历史上,HotSpot在码头容器中运行的记录很差,错误地判断了所分配的资源(例如RAM)。然而,情况正在缓慢改善。

OpenJ9如何与坞容器对齐,以及它在多大程度上了解容器提供的资源(内存、套接字、线程等)

此外,在JavaOne 2017演示文稿中,有人提到OpenJ9可以在不同的OpenJ9 VM之间缓存jit编译的类。当VM被限制在不同的容器(或)时,这个共享缓存是可能的,如果容器化JVM共享一个码头卷?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-17 08:16:54

  1. 容器支持目前正在进行中,要了解cgroup,请检查此按下。这也将导致添加容器支持。
  2. 对于共享类缓存(SCC),这两种情况都是可能的。请参阅这里中的“使用类数据共享功能”来获取共享坞卷的示例。当JVM被限制在没有共享卷的不同容器中时,建议构建带有SCC预构建的坞容器。你的码头工人会像这样。 来自adoptopenjdk/openjdk9-openj9:x86_64-alpine-jdk-9.181 运行mkdir /opt/shareclasses & mkdir /opt/app 复制japp.jar /opt/app CMD "java“、"-Xshareclasses:cacheDir=/opt/shareclasses”、"-jar“、"/opt/app/japp.jar”

然后,您需要构建和运行映像,并提交结果容器,并将其作为基本映像。

docker build -t japp:latest . docker run japp docker commit container_id japp

票数 2
EN

Stack Overflow用户

发布于 2019-08-12 20:49:56

可以创建共享类缓存并将其包含在Docker文件中。

共享类缓存可以在dev或prod环境中创建,也可以在应用程序上运行一些测试时创建。在prod中创建缓存可能更有效,,但是在构建过程中使用测试来完成要简单得多。我用Spring应用程序对它进行了测试,甚至包括在任何新生成的Spring项目中包含的简单的"contextLoads“测试都使产生了巨大的不同。

下面是一个使用Maven进行测试的示例,但是在不同的场景中也可以使用相同的VM选项。

1.使用启用共享类缓存的运行测试

您可以在Maven中使用尽力而为的插件,我不知道如何用Gradle完成这一工作

代码语言:javascript
复制
<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

  • cacheDir子选项用于指定缓存文件夹,以便更容易地包含在Docker映像中
  • 名称子选项是为了避免(难以预测的自动缓存名称)。
  • -Xscmx选项有限制缓存大小,这应该针对应用程序进行调优,在启动速度和映像大小之间存在权衡。
  • -Xquickstart选项指示JVM执行尽可能多的操作,当与-Xshareclasses选项结合使用时会执行尽可能多的操作。

您可以检查在 printStats subOption中使用了多少缓存大小,如下所示: java -jar -Xshareclasses:cacheDir=classCache、name=appname、readonly、printStats application.jar

2.向Docker映像添加预置缓存

只需将cacheDir子选项设置的目录添加到图像(在本例中为classCache )中

代码语言:javascript
复制
ADD classCache classCache

由于这些文件每次都会更改,所以应该将classCache 最后添加到图像中。

使用缓存运行应用程序。

代码语言:javascript
复制
ENTRYPOINT exec java -Xquickstart -Xtune:virtualized -Xshareclasses:cacheDir=classCache,name=appname,readonly -jar application.jar

VM参数:-Xquickstart -Xtune:virtualized -Xshareclasses:cacheDir=classCache,name=appname,readonly -jar application.jar

缓存可以使用classCache和name sub 指定,没有这些选项的可能会创建一个新的缓存文件夹,而忽略添加到图像中的缓存文件夹。

根据我的经验,只读选项使其速度更快一些,但严格来说并不是必要的。由于当容器被销毁时,这个缓存将被丢弃,所以没有必要持久化这些恒流。

-Xquickstart和-Xtune:virtualized选项将进一步优化容器中的启动速度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46783329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档