Docker部署SpringBoot项目,JVM内存调到192M的配置经验
背景我自己部署SpringBoot项目时服务器是华为云最低配——1核2G。跑着一个MySQL、一个Redis、一个Nacos还剩多少内存给应用不到500M。如果按默认JVM参数跑一个SpringBoot启动就吃掉300M堆内存加上Metaspace和线程栈随随便便上500M。两个服务部署上去OOM。所以必须压JVM内存。最终我把单个服务堆内存压到了192M服务正常运行。分享这个过程中踩的坑和最终配置。选基础镜像SpringBoot官方推荐openjdk镜像但那玩意 400M。换成精简版FROM eclipse-temurin:17-jre-alpinejre而不是jdkalpine而不是完整版。体积从 400M 降到 180M。不需要JDK编译能力运行环境有JRE就够了。如果需要更极致的可以用distroless但调试不方便生产环境用 alpine 够好了。JVM内存怎么算总内存2G减去操作系统~200MMySQL~400MRedis~100MNacos~300MDocker本身~200M剩余约 800M。跑两个SpringBoot 一个网关每个应用不能超过 200M。JVM启动参数ENV JAVA_OPTS-Xms128m -Xmx192m \ -XX:MetaspaceSize64m -XX:MaxMetaspaceSize96m \ -XX:MaxDirectMemorySize32m \ -XX:ReservedCodeCacheSize32m \ -XX:UseSerialGC \ -XX:TieredCompilation \ -XX:TieredStopAtLevel1 \ -XX:UseContainerSupport \ -XX:InitialRAMPercentage25.0 \ -XX:MaxRAMPercentage50.0逐项解释为什么这么设堆内存 -Xms128m -Xmx192m初始128M最大192M。初始设低一点避免一启动就占满让其按需增长。192M对于大多数CRUD服务足够了——主要是查数据库和Redis不做什么计算密集操作。元空间 -XX:MetaspaceSize64m -XX:MaxMetaspaceSize96mSpringBoot一个项目上百个类元空间得给够。64M起步最大96M。实测下来不会超过80M。直接内存 -XX:MaxDirectMemorySize32mNIO用的。如果用了Netty比如WebClient这块要留一点。32M保守够用。GC策略 -XX:UseSerialGC单核CPU用SerialGC反而最快。别一上来就往G1上招呼小堆用SerialGC停顿短、内存开销小。编译优化 -XX:TieredCompilation -XX:TieredStopAtLevel1关闭C2编译只用C1。C2编译慢、内存消耗大。小应用不用追求极致吞吐C1编译足够还能省Metaspace。容器感知 -XX:UseContainerSupportDocker里必须加否则JVM默认读宿主机的内存而不是容器的。不加这个参数-XX:MaxRAMPercentage不会生效。百分比设限 -XX:InitialRAMPercentage25.0 -XX:MaxRAMPercentage50.0配合UseContainerSupport使用。如果Docker分配了400M内存最大堆只用到200M。比直接写-Xmx灵活。完整DockerfileFROM eclipse-temurin:17-jre-alpine ​ RUN addgroup -S app adduser -S app -G app USER app ​ WORKDIR /app COPY target/*.jar app.jar ​ ENV JAVA_OPTS-Xms128m -Xmx192m \ -XX:MetaspaceSize64m -XX:MaxMetaspaceSize96m \ -XX:MaxDirectMemorySize32m \ -XX:ReservedCodeCacheSize32m \ -XX:UseSerialGC \ -XX:TieredCompilation -XX:TieredStopAtLevel1 \ -XX:UseContainerSupport \ -XX:InitialRAMPercentage25.0 -XX:MaxRAMPercentage50.0 ​ EXPOSE 8080 ENTRYPOINT [sh, -c, java $JAVA_OPTS -jar app.jar]几个注意点addgroup/adduser创建非root用户安全问题USER app之后的文件权限要注意EXPOSE 只是文档作用实际端口映射在 docker-compose 里配docker-compose 配置services: app-gateway: image: aipdt-java:v17 container_name: gateway ports: - 8080:8080 volumes: - ./gateway.jar:/app/app.jar - ./logs/gateway:/app/logs environment: - JAVA_OPTS-Xms128m -Xmx192m networks: - aipdt-cloud restart: unless-stopped ​ app-workflow: image: aipdt-java:v17 container_name: workflow ports: - 8897:8897 volumes: - ./workflow.jar:/app/app.jar - ./logs/workflow:/app/logs environment: - JAVA_OPTS-Xms128m -Xmx192m networks: - aipdt-cloud restart: unless-stopped ​ networks: aipdt-cloud: external: true配置外挂application.yml不同环境的差异通过Nacos配置中心管理镜像统一。踩过的坑1. alpine镜像DNS解析慢alpine默认用musl libcDNS解析行为跟glibc不同。有时服务间通过容器名通信会很慢。解决Java层面加-Djava.net.preferIPv4Stacktrue或者用openjdk:slim替代 alpine。2. Docker内存限制不等于JVM感知很多教程让你用docker run -m 400m限制容器内存然后JVM屁颠屁颠就适配了。不是的。必须加-XX:UseContainerSupportJava 10才有这个参数。如果没加JVM读到的是宿主机内存比如2G堆内存会设到500M然后超过容器的400M限制被Docker直接kill。3. 公网/内网端口不混用Docker容器间通信用内网container name外部访问才走宿主机端口。不要把数据库端口暴露到公网配置里只开放应用端口。总结低配服务器跑DockerJVM堆内存128-192M够用别用默认JVM参数手动配堆、元空间、GC-XX:UseContainerSupport是Docker必备配置外挂、镜像统一多环境一致性靠Nacos我正用一个人AI模式做独立开发微信小程序面狮狮已上线欢迎体验。更多技术分享https://gitee.com/yao113088/jiguang-dev

相关新闻

.NET日志框架核心原理与性能优化实践

.NET日志框架核心原理与性能优化实践

1. .NET日志框架的核心价值与诊断意义日志系统在.NET生态中扮演着系统"黑匣子"的角色,就像飞机上的飞行记录仪。我在处理线上事故时,90%的故障定位都依赖于良好的日志记录。一个典型的电商系统每天产生约2GB的日志数据,但真正有价值…

2026/8/1 16:13:13 阅读更多 →
GEO行业发展趋势:AI时代内容优化的未来

GEO行业发展趋势:AI时代内容优化的未来

随着生成式AI全面渗透搜索、问答、资讯、科普等场景,传统搜索引擎的流量占比持续下降,AI问答、智能检索成为用户获取信息的主流方式,GEO也从小众技术,逐渐成为数字化内容领域的核心刚需。第一个核心趋势:GEO全面替代传…

2026/8/1 16:13:12 阅读更多 →
AI 自动化工具 OpenClaw 完整安装文档,无需手动配置运行环境(含安装包)

AI 自动化工具 OpenClaw 完整安装文档,无需手动配置运行环境(含安装包)

OpenClaw 桌面自动化工具部署教程|图形化安装简化环境搭建 兼容系统:Windows10/11 64 位、macOS Windows 程序版本:v2.9.0 macOS 程序版本:v2.7.9 工具部署特点 OpenClaw 配备图形化安装程序,全程依托可视化界面操作…

2026/8/1 16:12:12 阅读更多 →

最新新闻

ESP32-C3开发实战:从蓝牙广播到智能硬件设计

ESP32-C3开发实战:从蓝牙广播到智能硬件设计

1. 从一块开发板说起:为什么是ESP-C3-32S-Kit?如果你最近在捣鼓物联网或者智能硬件,大概率会听到ESP32-C3这个名字。它不像它的老大哥ESP32那样自带Wi-Fi和蓝牙双模,而是主打一个“专精”——RISC-V内核加上蓝牙5.0。今天要聊的这…

2026/8/1 17:04:32 阅读更多 →
Java日志框架:深入解析java.util.logging(JUL)核心原理与实战应用

Java日志框架:深入解析java.util.logging(JUL)核心原理与实战应用

1. 项目概述:被低估的“原住民”日志工具聊到Java日志,大家脑子里蹦出来的多半是Log4j 2、Logback,再配上SLF4J这个门面,这几乎成了现代Java项目的标准答案。但很多开发者,尤其是刚入行的朋友,可能都忽略了…

2026/8/1 17:04:32 阅读更多 →
如何快速实现HTML转Word文档:html-to-docx完整指南

如何快速实现HTML转Word文档:html-to-docx完整指南

如何快速实现HTML转Word文档:html-to-docx完整指南 【免费下载链接】html-to-docx HTML to DOCX converter 项目地址: https://gitcode.com/gh_mirrors/ht/html-to-docx 还在为网页内容无法直接保存为专业Word文档而烦恼吗?html-to-docx作为一款强…

2026/8/1 17:04:32 阅读更多 →
终极FF14国际服汉化教程:3分钟实现中文界面完全指南

终极FF14国际服汉化教程:3分钟实现中文界面完全指南

终极FF14国际服汉化教程:3分钟实现中文界面完全指南 【免费下载链接】FFXIVChnTextPatch 项目地址: https://gitcode.com/gh_mirrors/ff/FFXIVChnTextPatch FFXIVChnTextPatch是一款专业的FF14汉化工具,能够快速将国际服客户端转换为中文界面&am…

2026/8/1 17:04:32 阅读更多 →
Unity过场动画系统:基于Timeline与Cinemachine的架构设计与实现

Unity过场动画系统:基于Timeline与Cinemachine的架构设计与实现

1. 项目概述与核心价值最近在复刻《空洞骑士》的Demo,做到第十九集,终于要啃一个硬骨头了:过场动画系统。很多朋友在做独立游戏时,一到需要讲故事、转场或者烘托情绪的关键节点,就有点犯怵。用动画序列硬拼&#xff1f…

2026/8/1 17:04:32 阅读更多 →
基于智能活动检测的Mac防休眠解决方案:Automatic Mouse Mover技术深度解析

基于智能活动检测的Mac防休眠解决方案:Automatic Mouse Mover技术深度解析

基于智能活动检测的Mac防休眠解决方案:Automatic Mouse Mover技术深度解析 【免费下载链接】automatic-mouse-mover a minimalistic go library/app to keep your mac active and alive 项目地址: https://gitcode.com/gh_mirrors/au/automatic-mouse-mover …

2026/8/1 17:03:32 阅读更多 →

日新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/8/1 13:02:46 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/8/1 5:19:34 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/8/1 10:33:33 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →