linux free 内存计算的核心处理代码
如果大家使用了node exporter 进行系统的监控,肯定会存在关于系统可用内存以及内存使用率的问题
node exporter 提供了好多指标,但是关于内存的基本都是通过/pro/meminfo 获取的,但是不同linux 内核
对于数据的处理是不一样的,以下是关于free 命令内存计算的核心规则,看看还是比较有用的,至少对于
如果计算会清晰很多
计算核心方法
if (!kb_main_available) {
if (linux_version_code < LINUX_VERSION(2, 6, 27))
kb_main_available = kb_main_free;
else {
FILE_TO_BUF(VM_MIN_FREE_FILE, vm_min_free_fd);
kb_min_free = (unsigned long) strtoull(buf,&tail,10);
watermark_low = kb_min_free * 5 / 4; /* should be equal to sum of all 'low' fields in /proc/zoneinfo */
mem_available = (signed long)kb_main_free - watermark_low
+ kb_inactive_file + kb_active_file - MIN((kb_inactive_file + kb_active_file) / 2, watermark_low)
+ kb_slab_reclaimable - MIN(kb_slab_reclaimable / 2, watermark_low);
if (mem_available < 0) mem_available = 0;
kb_main_available = (unsigned long)mem_available;
}
}
参考资料
https://access.redhat.com/solutions/406773
https://gitlab.com/procps-ng/procps