Linux 如何从用户空间获取映射内存区域的数量(mm_struct->;map_count)

Linux 如何从用户空间获取映射内存区域的数量(mm_struct->;map_count),linux,mmap,procfs,sysctl,Linux,Mmap,Procfs,Sysctl,我想将映射内存区域的数量添加到我的守护进程的状态报告中 您之所以需要此功能,原因有很多: 这是有限制的(vm.max\u map\u count),所以最好监视当前值 数量的增加可能是分配器错误导致不必要的虚拟内存碎片的迹象 数量的增加可能是文件映射泄漏的迹象。它们不一定会导致RSS的增长,也可能不会触发OOM。但是,它们会污染VMA树,并可能超过最大映射计数限制 问题是:从流程内部获取此数字的最佳方式是什么 一种方法是在/prof/self/map中计算行数,但它看起来不是最优的。我既不想解析

我想将映射内存区域的数量添加到我的守护进程的状态报告中

您之所以需要此功能,原因有很多:

  • 这是有限制的(vm.max\u map\u count),所以最好监视当前值
  • 数量的增加可能是分配器错误导致不必要的虚拟内存碎片的迹象
  • 数量的增加可能是文件映射泄漏的迹象。它们不一定会导致RSS的增长,也可能不会触发OOM。但是,它们会污染VMA树,并可能超过最大映射计数限制
  • 问题是:从流程内部获取此数字的最佳方式是什么

    一种方法是在/prof/self/map中计算行数,但它看起来不是最优的。我既不想解析一个10K行的文本文件来获得一个整数,也不想每次内核都具体化整个缓冲区

    内核中已经有一个计数器(mm_struct->map_count),所以我希望它出现在/proc/self/*中的某个地方,但实际上找不到它。有什么想法吗