有没有办法在 ps 或 top 中按非共享(私有)内存使用情况对进程进行排序?

有没有办法在 ps 或 top 中按非共享(私有)内存使用情况对进程进行排序?

我已经能够通过汇总匿名和堆栈映射来计算非共享内存的使用情况,pmap -x例如

sudo pmap -x $THE_PID |egrep 'anon|stack' | awk '{print $2}' | paste -sd+ | bc

但根本找不到任何方法来获取类似的信息pstop显示一SHR列,但似乎没有提供按非共享内存排序的方法。按 RSS 排序没有用,因为 RSS 包含共享页面,但据我所知,仅包含进程接触过的共享页面。

因此,如果有两个进程都使用相同的 16GB 共享地址空间,则它们将根据哪个进程接触了更多共享内存进行排序。而不是根据哪个进程分配了更多私有(非共享)内存进行排序,除非两个进程接触了相同或接近的共享内存量。

类似的问题出现在共享库的读/写映射中,以及fork被编辑但未被编辑exec的进程从其祖先共享写时复制页面时。

这……毫无帮助。

我研究过top按表达式对输出进行排序的方法。但如果它的排序语法支持这种排序,我就搞不懂了。

这看起来似乎是一件很明显的事情,但是 ps 甚至根本没有公开共享信息!

请告诉我我遗漏了什么。

相关内容