Loading... ## 前言 因开发了一个开源项目 [ZFile](https://github.com/zhaojun1998/zfile),提供 Docker 版本,最初构建镜像时,使用的是 [alpine](https://hub.docker.com/_/alpine) 因为大小只有 `5MB`,然后在此基础上,添加了 `jdk`、`wget`、`unzip` 等包,最终打包为 [alpine-java](https://hub.docker.com/r/zhaojun1998/zfile) 大小为 `108MB`,但实际运行内存占用会在 `400m` - `600m` 之间,还挺占内存的。 经过搜索发现 `openj9` 比较省内存,下面是 `Dockerfile`示例 和运行内存占用对比。 ## Dockerfile ### alpine-java ```dockerfile 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 ```dockerfile 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 最后修改:2022 年 05 月 19 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请我喝杯咖啡吧。
1 条评论
有可能是默认的jvm内存大小设置的不同