解释HP-UNIX下为什么top 出来的 memory 远比实际物理内存小

工作需要查看到HP-UNIX服务器的cpu以及内存信息,使用了基本的命令top显示结果如下:

System:test1 Thu Mar 31 12:49:14 2011

Loadaverages: 0.27, 0.27, 0.28

766processes: 666 sleeping, 84 running, 15 stopped, 1 zombie

Cpustates:

CPU  LOAD   USER   NICE    SYS  IDLE  BLOCK  SWAIT   INTR   SSYS

0   0.44  24.2%   0.2%  22.2%  53.5%  0.0%   0.0%   0.0%   0.0%

1   0.24   4.2%   0.6%   8.6%  86.7%  0.0%   0.0%   0.0%   0.0%

2   0.19   2.8%   0.0%   6.8%  90.4%  0.0%   0.0%   0.0%   0.0%

3   0.31   8.6%   0.0%   6.6%  84.9%  0.0%   0.0%   0.0%   0.0%

4   0.21   4.4%   0.0%  11.2%  84.5%  0.0%   0.0%   0.0%   0.0%

5   0.25   5.2%   0.6%   9.0%  85.3%  0.0%   0.0%   0.0%   0.0%

6   0.25  10.0%   0.0%  12.0%  78.1%  0.0%   0.0%   0.0%   0.0%

7   0.31  36.5%   0.0%  21.7%  41.8%  0.0%   0.0%   0.0%   0.0%

---  ----  -----  -----  -----  -----  ----- -----  -----  -----

avg  0.27  12.0%   0.0%  12.2%  75.8%  0.0%   0.0%   0.0%   0.0%

Memory:1240336K (994056K) real, 4532396K (4210200K) virtual, 950280Kfree  Page# 1/15

CPUTTY     PID USERNAME PRI NI  SIZE    RES STATE    TIME %WCPU  %CPUCOMMAND

3pts/11 29138 cmstst   241 20  2844K   356Krun   19807:33 99.01 98.84 ksh

注意红色部分,按照这样算下来内存总大小应该为:使用内存:1240336K  +  剩余内存:950280K= 2190616K

大小为2G 但是该台服务器的实际内存大小为8G,还有的6G内存哪里去了???

看这段解释:

top 只能看到进程所使用的内存量,所以你看到的 1240336K (994056K) real就是所有进程所使用的内存总和,这个内存是指物理内存,括号前那个值是Total Real Memory,括号内是Active Real Memory, 这两者的区别就在于Active Real Memory的值只是分配给那些已经在run queue或者正在运行的进程的Real Memory,Total Real Memory 包括所有的进程。

对于后一项值4532396K (4210200K)virtual的解释也是同样的,不过这个值代表了Virtual Memory(一般为建在Disk上的Swap空间,当然你要问了,我的Swap空间可不止这么些啊 by executing ‘swapinfo‘没错,Swap空间是大于这里的Total Vitual Memory的,但我前面说了,这里的值只是计算的分配给进程的),最后一项950280K free  到确确实实是Free Memory,它等于Physical Mem - kernel used - user used - buffer cache

看到这里我还是不很明白其他的内存那里去了,继续。。。

HP-UX是使用虚拟内存管理一个进程的内存使用空间的,虚拟内存(Virtual memory= 实际物理内存(physical memory+ SWAP交换区(swap space)。

swap区一般是指硬盘上的一大块空间(Oracle要求大小是物理内存的3倍以上)以便内存数据page in/page out。频繁的page in/page out浪费时间和系统资源(systembusIO bus速率不match等诸多因素),怎么办?惠普的解决办法是直接在内存上划一块空间作为pseudo memory以避免频繁的page in/page out。这部分伪内存(不知道这样翻译对不对,就是pseudomemory啦)对于HP-UX来说也可以看成是swap区的一部分。

并且一般系统会默认的把physical memory75%划做“交换区”

看到这里哥释然了............

swap space Physical Memory乘以75%+Swap Device space

所以系统的物理内存也可以大概估计出来:(real+free /0.25