Linux 上的进程内存使用情况

Linux 上的进程内存使用情况

我有关于进程内存使用情况的三个相互冲突的信息源。我使用 gnome-terminal 作为示例进程。

ps aux报告 pid 31880 的单位用法624480(我说单位,因为我不知道它使用什么作为单位),但根据https://superuser.com/a/117921/403466,以字节为单位。

然后我/proc/31880/status知道它是相同的量,但单位是 kB:

[...]
VmPeak:   624480 kB
VmSize:   624480 kB
VmLck:         0 kB
[...]

这相当于 624 MiB(完全不可能?);最后我得到了gnome-system-monitor大约。 9.9 MiB。

哪一个是正确的?

答案1

它们都是正确的:ps显示千字节,就像 一样/proc/.../status。 610 MiB (624,480 kiB) 是进程的虚拟大小,这是它保留的地址空间总量(在它自己的映射中)。 9.9 MiB 是其驻留大小,即其实际使用的内存量。

需要有关驻留集大小/虚拟大小的说明更多细节。

答案2

smem如果您还没有该软件包,请安装它。这是最准确的。ps -eo pid,command,rss两者ps -eo pid,command,size都有点不准确,因为它们在计算实际分配的内存时要么报告得不够,要么报告得太多。

smem显示 PID、用户、命令、交换、USS、PSS 和 RSS。运行它并注意该PSS列。这是实际使用的物理内存量,并且还考虑了实际使用的适当共享内存量。如果您只需要 PID、命令和 PSS,那么您可以将其通过管道传输到awk.对我来说,这就是第 1、3 和 6 列。

smem | awk '{print $1,$3,$6}'

相关内容