优化 Java 项目 Docker 镜像内存占用从 500 M 到 100M
source link: https://zhaojun.vip/archives/42/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
因开发了一个开源项目 ZFile,提供 Docker 版本,最初构建镜像时,使用的是 alpine 因为大小只有 5MB
,然后在此基础上,添加了 jdk
、wget
、unzip
等包,最终打包为 alpine-java 大小为 108MB
,但实际运行内存占用会在 400m
- 600m
之间,还挺占内存的。
经过搜索发现 openj9
比较省内存,下面是 Dockerfile
示例 和运行内存占用对比。
Dockerfile
alpine-java
FROM zhaojun1998/alpine-java
WORKDIR /root
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
RUN wget -O app.jar https://c.jun6.net/ZFILE/zfile-release.jar
EXPOSE 8080
ENTRYPOINT java $JAVA_OPTS -jar /root/app.jar
openj9
FROM ibm-semeru-runtimes:open-8-jre
WORKDIR /root
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
RUN curl -o app.jar https://c.jun6.net/ZFILE/zfile-release.jar
EXPOSE 8080
ENTRYPOINT java $JAVA_OPTS -Xshareclasses -Xquickstart -jar /root/app.jar
镜像大小比较
根据上方的 Dockerfile
进行构建,通过 docker images
命令查看镜像大小,对比结果如下:
alpine-java
版本镜像大小为: 108MB
openj9
版本镜像大小为: 321MB
可以看出 alpine
系列镜像在镜像大小上还是占绝对优势的。
内存占用比较
通过 docker stats
命令查看运行中的 docker
容器内存占用情况如下:
alpine-java
版本镜像:刚运行占用内存 350m-450m
左右,过一会能占用到 520m
,我的演示站因运行时间比较长,占用到了 663m
内存。
openj9
版本镜像:刚运行占用内存在 90m-100m
左右,过一会能占用 110m-120m
左右,较长时间的运行还没来得及测试。
由此可以看出 openj9
在内存占用上占用降低了好几倍。
openj9 介绍
对比完,我们来看看 openj9
到底是什么来头,其实他是 IBM J9 JVM
贡献给 Eclipse
基金会后改名为 OpenJ9
,现继续由 IBM
接管,可以从 openj9
官网查看详细信息:https://www.eclipse.org/openj9/
openj9
针对云环境和 Docker
运行环境进行了优化,并提升了启动速度,降低内存占用。详细性能对比见官方示例:https://www.eclipse.org/openj9/performance
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK