微服务-springcloud一次线上内存优化

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

  • 当今流行的spring cloud配合docker容器部署可以说是天衣无缝,但是存在一个缺点就是spring
    cloud制作的容器镜像比较大以及启动运行占用的内存空间比较大。

一、解决容器打包“体积”大

FROM java:8
VOLUME /tmp
ADD xxxx.jar /app.jar
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN bash -c 'touch /app.jar'
CMD ["java","-Djava.security.egd=file:/dev/./urandom","-jar", "-Duser.timezone=GMT+08", "/app.jar"]
  • 通过选择java:8作为基础镜像,打包出来的images要900M左右,现在在本地打包以及线上部署的效率会很低,同时比较占用磁盘空间
    解决:
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD xx.jar /app.jar
ENV TZ=Asia/Shanghai
RUN echo "http://mirrors.aliyun.com/alpine/v3.4/main/" > /etc/apk/repositories && apk add --no-cache tzdata && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone
RUN set -xe && apk --no-cache add ttf-dejavu fontconfig
ENTRYPOINT java -XX:+PrintFlagsFinal -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap $JAVA_OPTS -jar /app.jar
  • 采用alpine作为基础镜像,可以大大减小容器体积问题

二、解决运行内存占用大

  • 这里使用IBM的openjdk8-openj9进行问题解决,现在是IBM已经捐献给eclipse
FROM adoptopenjdk/openjdk8-openj9:alpine-slim
VOLUME /tmp
ADD xx.jar /app.jar
ENV TZ=Asia/Shanghai
RUN echo "http://mirrors.aliyun.com/alpine/v3.12/main/" > /etc/apk/repositories && apk add --no-cache procps curl bash tzdata && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone
RUN set -xe && apk --no-cache add ttf-dejavu fontconfig
ENTRYPOINT java -XX:+PrintFlagsFinal -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap $JAVA_OPTS -Xshareclasses -Xquickstart -jar -Duser.timezone=Asia/Shanghai /app.jar
  • alpine-slim为精简版,其中安装的jdk会缺少相关的监控工具如jstat,jmap,如果需要这里工具,将alpine-slim替换成alpine
  • 最终内存占用可以减少百分之60左右,具体根据实现业务功能情况来定
上一篇:alpine 构建ssh最小镜像


下一篇:Docker基础