尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Linux-Docker容器内存优化

Linux-Docker容器内存优化
📅 发布时间:2026/7/7 10:41:57

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

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

[ 应用层 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

相关新闻

  • Go 微服务熔断:别等下游挂死才开始保护自己
  • 计算机视觉与机器学习在航空遥感中的应用
  • 3步搞定Navicat无限试用:macOS用户的终极解决方案

最新新闻

  • 24位高精度ADC与MCU数据采集系统设计实战
  • 27国考省考笔试,临汾星途径如何用科学备考体系帮助考生高效进阶?
  • Blender 3MF插件:解决3D打印工作流数据丢失问题的专业解决方案
  • XDevelop:下一代智能开发平台,重塑软件开发体验
  • Paperxie 毕业论文智能写作功能|一站式搞定本科硕博论文,告别熬夜凑稿难题
  • 零基础入门漏洞挖掘:从核心原理到实战环境搭建

日新闻

  • Android逆向分析全能助手:集成化工具链与自动化工作流设计
  • 面搜索(Faceted Search)原理与工程实践指南
  • 神经网络调参避坑指南:从5个常见Loss曲线形态定位超参数问题

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号