1 - 使用“ps”

1 - 使用“ps”

我们如何知道哪个进程单独使用了多少内存?

答案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 是基于映射的扩展,显示每个进程映射的内存消耗。

或者使用映射图命令。

相关内容