首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由jlink生成的自定义JRE对于最小的jre具有较大的大小

由jlink生成的自定义JRE对于最小的jre具有较大的大小
EN

Stack Overflow用户
提问于 2019-09-22 11:36:34
回答 1查看 1.3K关注 0票数 2

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

我在Linkedin Learning上关注来自Arun Gupta的Kubernetes for Java Developers。在某种程度上,我注意到我的Ubuntu实例上有一个奇怪的行为。除了本课程之外,我还需要为一个最小的Spring Boot应用程序提供一个自定义的JRE,以便将其用于精简的Docker映像。

代码语言:javascript
复制
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实用程序。

使用Docker标志运行strip实用程序将使libjvm.so变得更小,并实现主要目标:为纤细的Docker镜像提供最小的--strip-unneeded (~113MB)。

代码语言:javascript
复制
strip -p --strip-unneeded myjre/lib/server/libjvm.so

我希望有知识的人能更深入地解释一下这种才华的背景。另外,在此行为方面,从jdk9到jdk11有什么变化?除了jdk9+提供的实用程序之外,是否有任何标准流程可以在没有任何外部实用程序的情况下实现此目标?

EN

回答 1

Stack Overflow用户

发布于 2020-07-17 14:14:15

可以使用其他选项来减小jlink中的大小。

--strip debug --no-header-files --no-man-pages

有关帮助,请参阅"jlink -- help“

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

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

https://stackoverflow.com/questions/58045819

复制
相关文章

相似问题

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