为什么顶部的VSIZE值与以ps为单位的VSZ(虚拟集大小)的值不同?


9

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

 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

我无法在任何达尔文机器上重现此内容。这让我觉得他们在iPhone上安装的外壳设置了怪异的块大小?
多项式

他们似乎以相同的方式计算RSIZE / rss,但ps报告的vsz比top报告的大2.5倍。也许top在IOS上,vsize中不包含共享对象或其他东西。
蒂姆·肯尼迪

“ iPhone的最高输出与Linux上的最高输出不同” –不足为奇吗?
poige

Answers:


5

Linux内存系统充满了内存优化实用程序和内存共享的许多例程,这使人们非常麻烦地了解如何共享内存以及如何使用内存,ps的输出以及其他与ps相关的命令都可以处理数据的输出在/proc文件系统下。尤其ps,RSS(驻留大小的内存)和VSIZE(虚拟内存的大小)都很重要,但是VSIZE并未显示内存的准确使用情况,并且VSIZE和rss之间的差异是初始化过程中的实际目的并分配给程序,但是可能尚未被引用。像该程序可能链接了许多库,但尚未加载它们,因为在实际程序运行时中尚未对其进行引用。RSS给出了程序实际使用的总内存,但可能没有给出真实的内存使用情况,因为分配的大部分内存可能与同一进程或其他进程的其他实例共享。往下看/proc/<processid>/maps可能会大致了解内存的使用方式,但它们的安静有时可能会误导您。采用pmap -x <pid> 从命令行查看,很有用。

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


为什么不应该将ps视为提供正确的进程内存使用的另一个原因或考虑周到的解释。请在virtualthreads.blogspot.com/2006/02/…上
Nikhil Mulley

2
这个答案的发布者试图说的是,所使用的内存定义是复杂且变化的。内核中没有一个地方可以跟踪和报告它。实用程序对内核报告的大量统计信息执行自己的解释。
约翰
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.