小编010*_*tes的帖子

如何获得进程的准确共享内存大小?

我试图在Linux上获得进程的共享内存大小.这是使用2个不同命令的结果:

  1. 顶部并检查SHR字段:

     PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    1734 root      20   0  201m 4072 1012 S  0.0  0.1  22:00.65 php-fpm
    
    Run Code Online (Sandbox Code Playgroud)
  2. pmap -d:

    mapped: 206672K    writeable/private: 4352K    shared: 128K
    
    Run Code Online (Sandbox Code Playgroud)

您可以看到pmap中的共享内存大小远小于top.

我读了一些源代码来找到原因.top似乎从/ proc // statm读取值,值由以下公式计算:

unsigned long task_statm(struct mm_struct *mm,
    unsigned long *shared, unsigned long *text,
    unsigned long *data, unsigned long *resident)
{
    *shared = get_mm_counter(mm, MM_FILEPAGES);
    *text = (PAGE_ALIGN(mm->end_code) - (mm->start_code & PAGE_MASK))
                                                       >> PAGE_SHIFT;
    *data = mm->total_vm - mm->shared_vm;
    *resident = *shared + get_mm_counter(mm, …
Run Code Online (Sandbox Code Playgroud)

linux memory-management shared-memory

6
推荐指数
1
解决办法
2529
查看次数

标签 统计

linux ×1

memory-management ×1

shared-memory ×1