![有没有办法在 ps 或 top 中按非共享(私有)内存使用情况对进程进行排序?](https://linux22.com/image/717824/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E5%9C%A8%20ps%20%E6%88%96%20top%20%E4%B8%AD%E6%8C%89%E9%9D%9E%E5%85%B1%E4%BA%AB%EF%BC%88%E7%A7%81%E6%9C%89%EF%BC%89%E5%86%85%E5%AD%98%E4%BD%BF%E7%94%A8%E6%83%85%E5%86%B5%E5%AF%B9%E8%BF%9B%E7%A8%8B%E8%BF%9B%E8%A1%8C%E6%8E%92%E5%BA%8F%EF%BC%9F.png)
我已经能够通过汇总匿名和堆栈映射来计算非共享内存的使用情况,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 甚至根本没有公开共享信息!
请告诉我我遗漏了什么。