我已经能够通过汇总匿名和堆栈映射来计算非共享内存的使用情况,pmap -x
例如
sudo pmap -x $THE_PID |egrep 'anon|stack' | awk '{print $2}' | paste -sd+ | bc
但根本找不到任何方法来获取类似的信息ps
。top
显示一SHR
列,但似乎没有提供按非共享内存排序的方法。按 RSS 排序没有用,因为 RSS 包含共享页面,但据我所知,仅包含进程接触过的共享页面。
因此,如果有两个进程都使用相同的 16GB 共享地址空间,则它们将根据哪个进程接触了更多共享内存进行排序。而不是根据哪个进程分配了更多私有(非共享)内存进行排序,除非两个进程接触了相同或接近的共享内存量。
类似的问题出现在共享库的读/写映射中,以及fork
被编辑但未被编辑exec
的进程从其祖先共享写时复制页面时。
这……毫无帮助。
我研究过top
按表达式对输出进行排序的方法。但如果它的排序语法支持这种排序,我就搞不懂了。
这看起来似乎是一件很明显的事情,但是 ps 甚至根本没有公开共享信息!
请告诉我我遗漏了什么。