【问题标题】:In Linux(RedHat) , C function malloc_stats() shows different values compared to /proc/<pid>/stat resident memory size在 Linux(RedHat) 中,C 函数 malloc_stats() 显示与 /proc/<pid>/stat 驻留内存大小不同的值
【发布时间】:2020-08-14 15:37:02
【问题描述】:

例如 对于在 Redhat linux 中运行的进程 根据 /proc/{pid}/stat 的常驻页面 * 页面大小 => 30 GB

根据malloc_stats() => 2.5 GB

知道为什么会这样吗?

Arena 0:
system bytes     =  465162240
in use bytes     =  465037200
Arena 1:
system bytes     =    1003520
in use bytes     =     980656
Arena 2:
system bytes     =    8065024
in use bytes     =    7771728
Arena 3:
system bytes     = 2278395904
in use bytes     = 2276584320
Arena 4:
system bytes     =    1482752
in use bytes     =    1236112
Arena 5:
system bytes     =    1482752
in use bytes     =    1235440
Arena 6:
system bytes     =    1482752
in use bytes     =    1240512
Total (incl. mmap):
system bytes     = 2782,699,520
in use bytes     = 2779710544
max mmap regions =          9
max mmap bytes   =   25624576

【问题讨论】:

    标签: c linux malloc redhat glibc


    【解决方案1】:

    malloc_stats 与用户空间中malloc 的实现相关联。

    pmap/proc/self/stat 与虚拟地址空间及其在内核态的感知有关,不仅随着malloc 调用的mmap 发生变化,而且还随着对mmap 的其他调用而改变,包括那些相关的到动态链接器 (ld.so)

    阅读好textbook on operating systems。另见https://linuxatemyram.com/proc(5)mmap(2)execve(2)malloc(3)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-24
      • 1970-01-01
      • 2017-09-14
      • 1970-01-01
      • 1970-01-01
      • 2014-02-07
      相关资源
      最近更新 更多