我们如何知道哪个进程单独使用了多少内存?
答案1
1 - 使用“ps”
这将显示使用内存最多的前 10 个进程:
ps aux --sort=-%mem | awk 'NR<=10{print $0}'
如果您愿意,您可以操纵 10。
2 - 使用“顶部”
当您打开顶部按键时,m
将根据内存使用情况缩短进程。
答案2
我更喜欢运行 htop,这样我就可以观察事情随时间的变化。
它使用终端窗口显示所有顶级进程,并不断自动更新。
您可以将其设置为基于 CPU(默认)或内存排序。
如果您的系统上没有它,则可以轻松安装。
答案3
确定单个进程消耗多少内存的问题是一个开放性问题,并且主要基于定义。
这个问题很大程度上是由共享库引起的——如何计算与其他 3 个进程使用相同 .so 的进程的内存使用情况?你会说它消耗了lib分配的整个内存,因为没有它它就无法运行吗?你会说它消耗了比例部分(1/4,因为还有 3 个其他进程同时使用它 - pss)?您会说该进程独立于它为了运行而加载的任何库吗?
您会包含换出的内存,还是仅包含物理 RAM 驻留页面?多线程或子进程怎么样?只要不进行任何更改,分叉就使用与其父进程相同的内存 - 您会计算每个进程的内存分配还是仅计算父进程的内存分配?
这个问题已经在这里和其他网站上被多次提出和回答,所以我只给出一些链接和一个一般性的结论。
首先是关于该主题被引用次数最多的文章 -https://emilics.com/notebook/enblog/p871.html
关于同一主题的一些 SO 和 U&L 问题:
https://stackoverflow.com/questions/7880784/what-is-rss-and-vsz-in-linux-memory-management
https://stackoverflow.com/questions/118307/a-way-to-define-a-processs-real-memory-usage-ie-private-dirty-rss
正确确定Linux中的内存使用情况
总之 -/prc/[pid]/smap
根据文档
/proc/PID/smaps 是基于映射的扩展,显示每个进程映射的内存消耗。
或者使用映射图命令。