问题出现得很突然,日志倒是留得挺全。监控一直在报可用内存不足,登录一看空闲内存只有两百 M,缓存却占了六个 G,可业务跑得好好的,延迟也没有变化。

这类报错背后常见的原因有几处,逐个排除就行。内核会把空闲内存拿去做页缓存,这部分在内存紧张时可以随时回收。也可能是真正该看的是可用内存估算值,而不是空闲那一列。

不容易想到的是,监控脚本只采集了空闲列,才会长期误报。

先看可用内存这一列的真实数值

free -h

接着确认缓存可以回收

grep -E 'MemAvailable|Cached' /proc/meminfo

然后确认没有进程在持续膨胀

ps -eo pid,rss,comm --sort=-rss | head

修正监控采集项

grep -n MemAvailable /etc/zabbix/zabbix_agentd.conf

改完先别撤,确认这几项。可用内存维持在总内存三成以上,业务延迟没有变化,监控不再误报内存不足。

补一句。手动清缓存会让热点数据重新从磁盘读,短时间性能更差;盯住可用内存和交换使用率就够了。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189