修改jvm启动大小

This commit is contained in:
promise_cyf
2026-10-10 15:58:18 +08:00
parent 7dcb094f4e
commit 2b1c6ccb73
2 changed files with 18 additions and 1 deletions
+12 -1
View File
@@ -3,7 +3,18 @@
FROM eclipse-temurin:21-jre FROM eclipse-temurin:21-jre
WORKDIR /app WORKDIR /app
ENV TZ=Asia/Shanghai ENV TZ=Asia/Shanghai
# JVM 默认参数(4H4G + 已跑 Redis/Gitea/Ollama 的低配场景):
# -Xms256m / -Xmx512m 堆固定,避免 JVM 猜着吃;不够再上调
# ExitOnOutOfMemoryError OOM 时直接退出,交给 Docker 重启,比卡死强
# HeapDumpOnOutOfMemoryError 出事时留一份堆快照便于排查
# 想运行时调整:compose 里覆盖环境变量 JAVA_OPTS 即可
ENV JAVA_OPTS="-Xms256m -Xmx512m -XX:+ExitOnOutOfMemoryError -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof"
# 本目录下放且仅放一个 jar(.dockerignore 已排除 target/,避免误打包) # 本目录下放且仅放一个 jar(.dockerignore 已排除 target/,避免误打包)
COPY *.jar app.jar COPY *.jar app.jar
EXPOSE 8077 EXPOSE 8077
ENTRYPOINT ["java", "-jar", "/app/app.jar"]
# sh -c "exec ..." 方式:先解析 $JAVA_OPTS,再用 exec 把 java 替换 sh 作为 PID 1,
# 这样 docker stop 发的 SIGTERM 能被 JVM 正常接收、Spring Boot 走完 shutdown hook
ENTRYPOINT ["sh", "-c", "exec java $JAVA_OPTS -jar /app/app.jar"]
+6
View File
@@ -35,3 +35,9 @@ services:
# 让容器能通过 host.docker.internal 访问宿主机(Linux 上必需) # 让容器能通过 host.docker.internal 访问宿主机(Linux 上必需)
extra_hosts: extra_hosts:
- "host.docker.internal:host-gateway" - "host.docker.internal:host-gateway"
# 内存硬限制:4H4G 机器上给 app 1G 足够(堆 512m + 堆外/线程/元空间等)。
# 配合 Dockerfile 里的 -Xmx512m,触顶会被 cgroup OOM kill,让 Docker 重启。
# 调整 JVM 堆:覆盖 JAVA_OPTS 环境变量即可,无需改 Dockerfile
mem_limit: 1024m
mem_reservation: 512m