java org.springframework.boot.loader.JarLauncher启动项目时设置jvm参数

需要求背景

阿里云服务器上,已上线的项目,最近总是崩,看日志是内存溢出,经过各种查找,最后定位到服务启动后jvm的堆内存太小(分配的总内存为500+M,但项目启动成功就使用了400+M内存),于是考虑解决jvm参数问题:关闭一些不在使用的服务,比如测试服务,jvm内存增加到了900+M。但是程序还是时不时会内存溢出,并且超级频繁的进行GC。于是考虑手动调优JVM参数。

java -jar xx.jar

本地使用java -jar xx.jar的方式启动项目,设置jvm参数小菜一碟:

// -Xms:初始堆内存 示例:-Xms1024m/-Xms1g
// -Xmx:最大堆内存 示例:-Xmx2048m/-Xmx2g 
java -Xms512m -Xmx2048m -jar application.jar

找到的讲的比较容易理解的jvm调优博客

但是

线上使用的不是java -jar的方式运行,而是使用java org.springframework.boot.loader.JarLauncher的方式运行,该怎么配置jvm参数呢?

第一步自然是上王查资料啊。但是,你要找JarLauncher运行原理,那是一搜一大堆,但是你搜怎么给其设置jvm参数,我是一个没找到。无奈,只能从头开始——看看原理是啥。网上的好文章一大堆,这里就不献丑讲原理了。
既然看完了原理,自然要有灵感:核心都是springboot自己封装了一波内容,将启动类做了些处理。——意识是,其核心还是java -jar?
果断试试:
先设置application.yml开始:
标准启动命名:

java org.springframework.boot.loader.JarLauncher

参考java -jar 命令:
java -Dspring.profiles.active=dev -jar application.jar
进行替换:
java -Dspring.profiles.active=dev org.springframework.boot.loader.JarLauncher
然后:竟然配置成功了
看来果然是个纸老虎:做个包装而已,那继续加上jvm参数:
java -jar 命令:

# 初始堆内存512M,最大堆内存2G,使用dev作为application,使用80端口
java -Xms512m -Xmx2g -Dspring.profiles.active=dev -jar --server.port=80 application.jar

进行替换:

java -Xms512m -Xmx2048m -Dspring.profiles.active=dev org.springframework.boot.loader.JarLauncher --server.port=80

配置成功!!!!

附:dockerfile内容

java -jar

FROM openjdk:8-jre
WORKDIR /app
COPY target/admin.jar /application.jar

# 解决时区问题
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
  echo "Asia/Shanghai" > /etc/timezone

EXPOSE 80
ENTRYPOINT [\
   "java", \
   "-Dspring.profiles.active=dev", \
   "-jar", \
   "/application.jar", \
   "--server.port=80", \
   "--ruoyi.profile=/app/uploadFile" \
]

java org.springframework.boot.loader.JarLauncher

FROM openjdk:8-jre as builder
WORKDIR /app
COPY target/community-admin.jar application.jar
COPY target/classes/ccbOutreachConfig.xml ccbOutreachConfig.xml
RUN java -Djarmode=layertools -jar application.jar extract

FROM openjdk:8-jre
WORKDIR /app
ARG BUILD_PATH=/app
COPY --from=builder ${BUILD_PATH}/dependencies/ /app
COPY --from=builder ${BUILD_PATH}/snapshot-dependencies/ /app
COPY --from=builder ${BUILD_PATH}/spring-boot-loader/ /app
COPY --from=builder ${BUILD_PATH}/application/ /app
COPY --from=builder ${BUILD_PATH}/ccbOutreachConfig.xml /app

# 解决时区问题
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
  echo "Asia/Shanghai" > /etc/timezone

EXPOSE 80
ENTRYPOINT [\
   "java", \
   # 设置初始堆内存 1.5G
   "-Xms512m", \
   # 设置最大堆内存
   # "-Xmx2048m", \
   "-Dspring.profiles.active=dev", \
   "org.springframework.boot.loader.JarLauncher", \
   "--server.port=80", \
   "--ruoyi.profile=/app/uploadFile" \
]

最后,附上docker操作笔记

docker desktop使用手册

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值