理解伪交换,首先得清楚交换区的概念和HP-UX的交换机制!
交换区,就是系统物理内存不足时,OS用来临时存放物理内存的一部分数据,从而腾出更多的物理内存空间!
HP-UX的交换机制:系统每启动一个进程,都会在交换区预留一定的空间(等同于该进程使用物理内存的大小),以防内存不足时,有足够的交换区来临 时存放数据,但不一定真正使用。但是交换区预留以后,不管是不是真的被使用,就不能再被其它进程预留(使用),除非该进程运行完毕自然释放。打个比方,酒 店里客人预定了座位,那么这个座位就不能再接受别人的预定,除非客人打电话取消预定。当然,即使客人预定了不代表就一定来吃。
和交换区预留不一样的是:座位预定了通常客人是要来真正使用的,而交换区预留以后通常是不使用的。这种机制会导致的一个问题是:如果内存很大,可能会导致内存浪费!为什么呢?
假设系统物理内存是8G,那么按照常规的设置,交换区大小是内存的1-2倍,就是8-16G!但是,通常的情况是,购买了大内存,就是为了避免内存 不足产生交换,这种状况下,交换区是很少有机会做真正的数据交换的。有些客户会把交换区设为4G或者更少到2G(这完全有可能;节省存储空间啊)!后果 是,随着新进程的不断启动,当交换区被预留完了以后,系统就不能再启动新的进程;而此时其实物理内存可能还有3G或者更多的空余,却什么也不能干了!
为了解决这个矛盾,HP-UX推出“伪交换区”的概念!就是当系统启用伪交换以后,系统会默认为交换区的总数=物理内存的75%+其它交换区的总 数。而这个75%的伪交换区其实是不存在的(欺骗):不在内存、不在硬盘或者任何文件系统中。意思就是说,当真正的交换区用光了还要启动新进程时,告诉系 统,我的交换区还多着呢,该启动谁尽管启动......
是否启用伪交换,可以通过系统内核参数swapmem_on来设置,1表示启用,0表示不启用。
通常,实际交换区的大小大于或等于物理内存大小时,这个参数启不启用没什么影响;否则建议启用伪交换。
但是,注意有些应用程序(很少),当启用伪交换时,性能可能会下降!
附增加交换区的方法:
系统默认的SWAP区是在安装操作系统的时候指定的,是一块连续的空间,无法对其进行扩展。 一般都是新添加的SWAP都是设备交换空间 ,文件系统交换空间比较少用,不做介绍。
1. 如果你在使用磁盘设备c2t1d0的后100M字节作为交换空间并且将剩余部分用与文件系统。 newfs -R 100 /dev/rdsk/c2t1d0 swapon -e /dev/dsk/c2t1d0 在/etc/fstab中加入 /dev/dsk/c2t1d0 . swap defaults 0 0
2. 使用整个磁盘,如c2t1d0 swapon /dev/dsk/c2t1d0 在/etc/fstab中加入 /dev/dsk/c2t1d0 . swap defaults 0 0
3. 使用逻辑卷 lvcreate -L size -C y -r n /dev/vgname swapon /dev/vgname/lvname 在/etc/fstab中加入 /dev/vgname/lvname . swap defaults 0 0