比较 HP-UX 、 Linux 和 AIX 上 top 输出中与 PgSp 相似的字段( HP-UX 上是 SIZE ,Linux 上是 VIRT),PgSp 实在是名字起得不好,太容易和 Paging Space 混淆,注意一个是名词 Page,一个是动词 Paging,Paging Space 在 AIX 中与 Swap Space 是互换使用的,Paging Space 是换页空间,也是交换区所在。PgSp 是虚空间(Virtual Space),不是换页空间或交换区空间。man topas 手册页对 Page Space 说明如下:
Virtual working set size used by process (4KB pages). Note: The true paging space allocations per process are not available using the topas command. Refer to the svmon command for more detailed.
PgSp 只包括进程私有数据段以及堆栈段虚空间,不含执行映象、共享库、共享内存部分,PgSp 的值一定大于或等于 DATA RES(见前面 topas -P 输出) 的值,因为 PgSp 会包括不在内存中的不活动的私有数据段部分或者已被交换到换页空间上的部分。什么叫不活动的数据段,举个例子,你有一个应用程序通过 malloc 系统调用申请了 1MB 内存空间,系统并非马上就在物理内存中就给它划了那么多空间,你如果一直不用这段内存(譬如作 I/O 操作),那么这段空间只在虚空间里存在。在前面 topas -P 输出中,我们看到一个进程号是 324076 的 oracle 进程,其 PgSp 与 Data RES 相同,都是 1293 页;一个进程号是 327748 的 oracle 进程,其 PgSp 是 1084 页,Data RES 是 256 页;一个进程号是 307496 的 PatrolAgent 进程,其 PgSp 是 11840 页,Data RES 是 5072 页。一般内存充裕的情况下,PgSp 与 Data RES 是一致的,除非你程序编得不好,申请一个大内存又不用。前面 topas 标准输出中我的计算内存(%Comp)已占到总内存的 88%,换页空间(paging space)使用了 15%,这不是一个内存很充分的系统。