记录一下那天晚上的排查过程。控制台标注实例内存四 G,系统里查到的总量只有三点七 G,应用按四 G 规划的内存直接超了规划。
这类报错背后常见的原因有几处,逐个排除就行。部分内存被内核和硬件保留。另一种情况是虚拟化设备预留了内存区域。
不容易想到的是,系统本身运行也需要额外开销。
上来先看内核识别的总内存
grep MemTotal /proc/meminfo
接着看被保留的内存区域
dmesg | grep -i reserved
然后确认实例规格与计费口径
lscpu | grep -i 'model name'
剩下的就是按可用内存重新规划
free -m
当时还开着另一个排查窗口,两边日志对照着看才定位到。
别只看报错消失,验证要多做一步。服务内存规划总和低于可用内存的八成,运行不再出现紧张和频繁回收。
提醒一点。云厂商标注的是规格内存,系统可用量总会少一些;按九成估算更稳,别卡着上限配服务。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。