我有关于进程内存使用情况的三个相互冲突的信息源。我使用 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}'