获取进程大小的正确方法是Solaris, HP-UX
什么AIX
?我们应该使用top
还是ps -o vsz
其他?
4 回答
vsize
, rss
, rprvt
,和其他看起来晦涩的缩写的确切定义rshrd
因操作系统而异。top
和命令的手册页ps
会有某种描述,但所有这些描述都被大大简化了(或者基于早已灭绝的内核实现)。
在一般情况下,“流程规模”作为一个概念很难确定。特定情况下的答案在很大程度上取决于操作系统中的实际内存管理实现,并且很少像大多数用户(和大多数开发人员)头脑中存在的整洁的“进程大小”概念那样令人满意。
例如,这些数字中的任何一个(也可能是它们的任何组合)都不能用来准确地告诉您在给定的空闲内存量中可以同时运行多少个此类进程。但实际上,你最好的选择是从那一端开始:你为什么要这个号码,你会用它做什么?鉴于这些信息,我认为您会得到更多有用的答案。
是的,你锁定在 VSZ 是对的。
ps u
将为您提供 VSZ 和 RSS,它们是虚拟内存大小和驻留集大小。RSS 是为进程分配了多少物理内存,VSZ 是进程的虚拟内存大小。如果您有多个程序正在运行,那么 VSZ 中的大量内存将在这些进程之间共享。
在 Solaris 上,您可以使用该pmap
命令获取有关进程内存使用情况的详细信息。特别是,pmap -x <pid>
向您显示一个进程的内存有多少是共享的,以及该进程专门使用了多少。这对于计算进程的“边际”内存使用量很有用——通过这种技术,您可以避免重复计算共享库。
我总结了所有这样的进程的驻留集大小(作为根):
ps ax -o rss | awk '{rss += $1;} END { print rss}'