当前位置: 首页 > news >正文

Linux-Docker容器内存优化

一、整体优化思路(非常重要)

系统内存优化不是单点,而是三层结构:

[ 应用层 JVM ] ↓ [ 容器层 Docker ] ↓ [ 系统层 Linux ]

👉 优化必须三层一起做,否则无效


🐳 二、Docker 容器内存优化


1️⃣ 查看内存占用 Top N

✔ Top10(推荐)

docker stats --no-stream --format "{{.Name}} {{.MemUsage}}" \ | sort -k2 -h -r | head -n 10

✔ 带百分比 Top10

docker stats --no-stream --format "table {{.Name}}\t{{.MemUsage}}\t{{.MemPerc}}" \ | sort -k3 -h -r | head -n 11

2️⃣ 容器内存限制(关键)

--memory=1g --memory-swap=1g

👉 作用:

  • 限制容器最大使用内存
  • 防止宿主机被打爆

⚠️ 常见问题

  • 没限制 → JVM 无限吃内存
  • 限制太大 → 无意义
  • 限制太小 → OOM

🎯 推荐分级

服务类型内存
工具服务512M
普通服务768M ~ 1G
核心服务1G ~ 2G
中间件独立调优

☕ 三、JVM 内存优化(核心)


1️⃣ Java 8(不推荐但常见)

-Xms256m -Xmx768m -XX:MaxMetaspaceSize=192m -XX:MaxDirectMemorySize=256m 不换行JDK8 ENTRYPOINT ["java","-Xms256m","-Xmx768m","-XX:+UseContainerSupport","-XX:MaxRAMPercentage=60","-XX:MaxMetaspaceSize=192m","-XX:MaxDirectMemorySize=256m","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]

2️⃣ Java 17(推荐)

-Xms256m -Xmx768m -XX:+UseContainerSupport -XX:MaxMetaspaceSize=192m -XX:MaxDirectMemorySize=256m --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED 不换行JDK17 ENTRYPOINT ["java","-Xms256m","-Xmx768m","-XX:+UseContainerSupport","-XX:MaxRAMPercentage=60","-XX:MaxMetaspaceSize=192m","-XX:MaxDirectMemorySize=256m","--add-opens","java.base/java.lang=ALL-UNNAMED","--add-opens","java.base/java.lang.reflect=ALL-UNNAMED","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"] 字节码多的换参数 ENTRYPOINT ["java","-Xms512m","-Xmx1024m","-XX:+UseContainerSupport","-XX:MaxRAMPercentage=60","-XX:MaxMetaspaceSize=300m","-XX:MaxDirectMemorySize=512m","--add-opens","java.base/java.lang=ALL-UNNAMED","--add-opens","java.base/java.lang.reflect=ALL-UNNAMED","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]

❗ 注意

  • MaxRAMPercentage仅 JDK10+
  • Java8 不支持,会直接报错
  • docker run 命令后要添加: --memory=1g --memory-swap=1g

3️⃣ JVM + Docker 配合原则

JVM Xmx + Metaspace + DirectMemory ≤ Docker limit

🎯 推荐配置(稳定版)

Docker: 1G JVM: 768M

🧠 四、Linux 内存机制优化


1️⃣ 查看内存

free -h

2️⃣ 清理缓存(临时)

sync; echo 3 > /proc/sys/vm/drop_caches

⚠️ 不建议频繁使用


3️⃣ swappiness 优化

echo "vm.swappiness = 10" >> /etc/sysctl.conf sysctl -p

👉 含义:

  • 60(默认)→ 过早使用 swap ❌
  • 10 → 只在必要时使用 ✔

💾 五、Swap 设置(重点)


1️⃣ 创建 swap(推荐放大盘)

dd if=/dev/zero of=/data/swapfile bs=1G count=16

2️⃣ 设置权限

chmod 600 /data/swapfile

3️⃣ 格式化 swap

mkswap /data/swapfile

4️⃣ 启用 swap

swapon /data/swapfile

5️⃣ 开机自动挂载

echo '/data/swapfile swap swap defaults 0 0' >> /etc/fstab

6️⃣ 查看 swap

free -h swapon --show

🎯 Swap 作用

  • 防止 JVM 瞬时 OOM
  • 防止 Docker 被 kill
  • 提供“缓冲区”

⚠️ 注意

  • swap ≠ 内存扩容
  • swap = 防崩溃缓冲

🧩 六、完整优化流程(实战顺序)


✔ Step 1:查内存

docker stats --no-stream

✔ Step 2:定位 Top 容器

sort -k2 -h -r

✔ Step 3:限制 Docker

--memory=1g

✔ Step 4:限制 JVM

-Xmx768m

✔ Step 5:加 swap

/data/swapfile

✔ Step 6:验证

free -h docker stats

🚨 七、常见错误总结


❌ 错误1:只调 swap

→ 没用


❌ 错误2:只调 Docker

→ JVM 还是爆


❌ 错误3:只调 JVM

→ 容器还是可能被 kill

http://www.jsqmd.com/news/1140689/

相关文章:

  • OpenEuler Custom Build Tool高级用法:自定义rpmbuild参数传递
  • GLM5.2 MoE大模型低显存部署实战:8GB显卡运行753B参数模型
  • 终极指南:三分钟完成Windows和Office智能激活
  • 乡镇级行政区划数据获取:水经注 vs 公开数据源,5项关键指标对比与自动化方案
  • ClickHouse 分布式表设计指南:分片键选错,查询会慢成什么样
  • 【无人机通信】基于 MILP 公式和鲁棒优化概念在不确定性下进行多目标无人机路由优化附Matlab代码
  • GitHub Copilot 2026升级:1M上下文+可配置推理+Agent API重构开发范式
  • Windows Defender误报Trojan:Win32/Vigorf.A?五步法精准鉴别病毒与误报
  • Go 微服务熔断:别等下游挂死才开始保护自己
  • STM32L4S5ZI与WSEN-ISDS传感器的姿态解算与轨迹重构
  • 预览 GPT-5.6 Sol:新一代模型
  • D3-MoE:双解耦扩散混合专家实现可控自动驾驶轨迹规划
  • 计算机视觉与机器学习在航空遥感中的应用
  • 3步搞定Navicat无限试用:macOS用户的终极解决方案
  • PKHeX.Mobile跨平台宝可梦存档编辑实战指南
  • 多USV环航定位:MCKF与PLKF协同的状态估计框架
  • SCI论文绘图
  • Java面试:音视频场景中的微服务与云原生技术
  • 高效免费GPU内存检测:3个实用场景教你快速排查显卡硬件问题
  • 收藏!2026年AI最大风口:掌握这三项技能,年薪百万不是梦!
  • 为什么 AI 会一本正经地胡说八道?
  • ICM-42605与TM4C129ENCZAD实现6DOF运动追踪方案
  • 把RAG错答当成证据链断裂:从最终声明反查检索现场
  • 5分钟快速上手:B站视频下载器完整指南(支持大会员4K和充电专属)
  • 孤能子视角:三十六计之顺手牵羊——涌现捕获
  • 5分钟解决GitHub下载龟速问题:Fast-GitHub加速插件完整指南
  • 2027秋招提效策略:网申插件一键投简历的落地应用总结
  • Claude 近期动态观察:当 AI 开始以“同事”身份加入团队
  • 2026北京客户评选的小程序开发公司排名:备受好评的小程序开发服务商哪家好
  • 终极崩坏星穹铁道自动化助手:3分钟解放双手的游戏神器