我试图在Linux上获得进程的共享内存大小.这是使用2个不同命令的结果:
顶部并检查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)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)