jlink制作的自定义JRE具有较大的尺寸,而Jre最小

时间:2019-09-22 03:36:34

标签: java docker java-11 jlink openjdk-11

我正在尝试为纤细的Docker映像提供最小的JRE。在Ubuntu上的open-jdk-11附带的jlink 11.0.4中,使用此自定义JRE构建的映像实际上比使用默认JRE生成的映像更大。我认为这是由于cutom_jre / lib / server / libjvm.so的大小过大

我正在Linkedin学习中关注Arun Gupta的Java开发人员Kubernetes。在某个时候,我注意到我的Ubuntu实例上有一个奇怪的行为。在学习本课程的同时,我需要为最小的Spring Boot应用程序提供一个自定义JRE,以便将其用于细长的Docker映像。

jlink \
--output myjre \
--add-modules $(jdeps --print-module-deps target/greeting.jar),\
java.xml,jdk.unsupported,java.sql,java.naming,java.desktop,\
java.management,java.security.jgss,java.instrument \

此方法在整个过程中效果很好,并且my_jre的大小适合为应用程序构建最小的Docker映像。问题在于,在我的设置中,我使用的是openjdk-11,而不是openjdk-9。

在我的设置下,my_jre的大小将非常大(〜380mb)。经过一番调查,我发现这主要是并且可能仅是由于my_jre/lib/server/libjvm.so的大小所致。

在进行此尝试之前,我没有使用jlink的经验。经过一番尝试和错误,并浏览了github上的类似问题之后,我发现了jlink功能之外的解决方法。

此替代方法来自binutils软件包和strip实用程序。

运行带有strip标志的--strip-unneeded实用程序将缩小libjvm.so的大小,并可能实现主要目标:为最小的Docker映像提供最小的JRE(〜113mb)

strip -p --strip-unneeded myjre/lib/server/libjvm.so

请有知识的人对这种天赋的背景做更深入的解释。另外,就此行为而言,从jdk9更改为jdk11是什么?除了jdk9 +所提供的外部实用程序(例如jlink)之外,是否有任何标准的程序来实现此目标?

1 个答案:

答案 0 :(得分:1)

还有其他选项可以减小jlink的大小。

-strip调试 --no-header-files --no-man-pages

有关帮助,请参见“ jlink --help”

我还尝试创建自定义JRE。我得到libjvm.so将近415 MB。 通过上面提到的选项,我使JRE大小达到了39.7 MB。