为什么top中VSIZE的值和ps中VSZ(Virtual set size)的值不同?

Ral*_*Wen 9 osx top ps iphone ios

我知道 VSZ inps是为应用程序分配的总地址空间,有时别名为 vsize(ps在 linux 的手册页中提到),但是 VSIZE in 的定义是什么top?iPhone 上的这个 top 输出与 Linux 上的 top 不同:

 PID COMMAND      %CPU   TIME   #TH #PRTS #MREGS  RPRVT  RSHRD  RSIZE  VSIZE
 1875 emma         0.0%  0:30.83   7   139    932 17868K  5328K    29M   181M

root# ps -eo pid,rss,vsz|grep 1875
 1875  29324   441324
Run Code Online (Sandbox Code Playgroud)

Nik*_*ley 6

Linux内存系统充满了许多内存优化实用程序和内存共享的例程,使得内存如何共享和消耗的想法非常麻烦。 ps和其他ps相关命令的输出都是从数据中得出的输出在/proc文件系统下。特别ps, RSS(resident size memory) 和 VSIZE(Virtual memory size) 都很重要,但是 VSIZE 并没有显示内存的准确使用情况, VSIZE 和 rss 之间的区别是在初始化过程中实际打算分配给程序的,但是可能还没有被引用。就像程序可能链接了很多库,但它们还没有加载,因为它们在实际程序运行时还没有被引用。RSS 给出了程序实际使用的总内存,但可能无法给出内存消耗的真实情况,因为分配的大部分内存可能与同一进程或其他进程的其他实例共享。往下看/proc/<processid>/maps可能会粗略地了解内存是如何使用的,但它们有时会产生误导。用pmap -x <pid> 从命令行,查看扩展很有用。

通常更好的实用程序是freevmstatfree将为您提供当前的总体内存消耗详细信息,并且 vmstat 可用于查看更新频率。

  • 这个答案的发布者试图说的是,所用内存的定义是复杂而多样的。内核中没有一个地方可以跟踪和报告它。这些实用程序对内核报告的大量统计信息执行自己的解释。 (2认同)