我正在尝试为纤细的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功能之外的解决方法。
运行带有strip
标志的--strip-unneeded
实用程序将缩小libjvm.so的大小,并可能实现主要目标:为最小的Docker映像提供最小的JRE(〜113mb)
strip -p --strip-unneeded myjre/lib/server/libjvm.so
请有知识的人对这种天赋的背景做更深入的解释。另外,就此行为而言,从jdk9更改为jdk11是什么?除了jdk9 +所提供的外部实用程序(例如jlink)之外,是否有任何标准的程序来实现此目标?
答案 0 :(得分:1)
还有其他选项可以减小jlink的大小。
-strip调试 --no-header-files --no-man-pages
有关帮助,请参见“ jlink --help”
我还尝试创建自定义JRE。我得到libjvm.so将近415 MB。 通过上面提到的选项,我使JRE大小达到了39.7 MB。