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

posted on 2020-09-05 18:39  荣锋亮  阅读(348)  评论(0编辑  收藏  举报

导航