首页/云/Kubernetes 速查/内存单位:Mi/Gi 与十进制写法
调度与资源52 条

内存单位:Mi/Gi 与十进制写法

内存支持十进制(M/G)与二进制(Mi/Gi)单位,Mi 是常用写法;内存不可压缩,超出 limit 直接被内核杀掉。

Kubernetes 速查云更新于 2026-10-13

内存单位是什么

内存支持两套单位体系:十进制以一千为进位,二进制以一零二四为进位。同一个字面量在两套体系下实际容量相差约百分之四点六,因此团队内应统一一种写法并在评审时检查。内存与 CPU 最大的差别在于不可压缩:容器超过自己的上限会被直接终止,而不是被限速。

为什么上限设置格外敏感

对 CPU 而言,上限不够只是变慢;对内存而言,上限不够就是被杀掉重启。加上许多运行时的内存占用不止堆内存这一块,还包括运行时自身与堆外分配,光按堆大小设置上限往往会周期性触发终止。因此内存上限通常要按实测峰值加合理余量来定。

基本信息

适用环境任何 Kubernetes 发行版,用于容器的资源请求与上限字段
两套体系十进制与二进制,团队内需统一
换算关系二进制体系下相邻单位相差一零二四
超出上限容器被终止并重启,不属于限速
节点层面节点内存紧张时按保障等级决定驱逐顺序
常见取值小服务按百兆级,数据库与缓存按实际工作集

典型使用场景

  • 服务规格声明:按实测稳态与峰值确定请求值与上限
  • 缓存类服务:工作集随数据增长,需要定期复核上限
  • 批量任务:按单批数据规模估算内存需求
  • 排查周期重启:确认是否因上限过低被终止
  • 节点容量规划:把请求值汇总,判断节点是否还有余量
  • 成本优化:对比实际用量与请求值,缩紧过度预留

写法与核对

写法与核对
resources:
  requests:
    memory: 256Mi    # 二进制体系,常用写法
  limits:
    memory: 512Mi    # 超过即被终止,按实测峰值加余量
# 十进制体系的同名字面量容量略小,混用会造成临界负载踩线

排查被终止

排查被终止
kubectl describe pod web-x | sed -n '/Last State/,+4p'   # 看上一次终止原因
kubectl get pod web-x -o jsonpath='{.status.containerStatuses[0].lastState.terminated.reason}'
kubectl top pod web-x --containers                        # 当前各容器用量
kubectl describe node node-1 | grep -A8 'Allocated resources'

两套体系对照

体系进位使用建议
十进制以一千为进位与厂商标称容量一致,便于对外表述
二进制以一零二四为进位容器资源声明里的常见写法
混用风险同名字面量差异约百分之四点六临界负载容易出现不一致行为
内存上限低于应用真实工作集时容器会被反复终止,现象是重启计数持续增长,排查要结合上一次终止原因判断。
节点内存紧张时,系统会按保障等级与用量超出请求值的程度排序驱逐,请求值填得越准,被牺牲的顺序越靠后。

易错点

  • 两套单位混用:同名字面量容量不一致,临界负载出现难以解释的差异
  • 按堆大小设置上限:运行时开销与堆外内存都计入容器,实际会周期性被终止
  • 请求值远低于真实用量:调度装箱后节点内存实际不足,驱逐变得频繁
  • 只调大上限不查增长原因:内存泄漏导致的增长会被暂时掩盖,问题在更高水位上重现

数据来源与参考

  • Kubernetes 官方文档 · 管理容器的计算资源(内存单位)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌