java org.springframework.boot.loader.JarLauncher启动项目时设置jvm参数
java org.springframework.boot.loader.JarLauncher配置参数
需要求背景
阿里云服务器上,已上线的项目,最近总是崩,看日志是内存溢出,经过各种查找,最后定位到服务启动后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
但是
线上使用的不是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操作笔记
更多推荐
所有评论(0)