微服务-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左右,具体根据实现业务功能情况来定
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值