SWAP的用处 Solaris7 交流 --- swap管理( 二 )



如果有多个Swap交换区,Swap空间的分配会以轮流的方式操作于所有的Swap,这样会大

大均衡I/O的负载,加快Swap交换的速度 。如果只有一个交换区,所有的交换操作会使交

换区变得很忙,使系统大多数时间位于等待状态,效率很低,用性能监视工具就会发现

,此时的CPU并不很忙,而系统却慢,这说明,瓶颈在I/O上,依靠提高CPU的速度是解决

不了问题的 。

性能监视

Swap空间的分配固然很重要,而系统在运行时的性能监控却更加有价值,通过性能监视

工具可以检查系统的各项性能指标,找到系统性能的瓶颈 。本文只介绍一下在Solaris下

和Swap相关的一些命令和用途 。

最常用的是Vmstat命令,在大多数Unix平台下都有此命令,此命令可以查看大多数性能

的指标 。

另外使用swap -s 也能简单的查看当前swap资源的使用情况 。例如:

# swap -s

total: 65896k bytes allocated + 56840k reserved = 122736k used, 1069456k

available

能够方便的看出swap空间的已用和未用资源的大小 。应该使Swap保持30%的负载以下,

才能保证系统的良好性能 。

Solaris中Swap的特点

虚拟Swap空间

本来Swap空间就是为虚拟内存服务的,现在Solaris的Swap空间也成为虚拟,这到底是

怎么回事呢? 让我们看一个例子就明白了,当在Solaris 2以前版本的Solaris(或其它

Unix,如Linux)上编程时经常会出现一个问题:

假设系统当前还有可用的内存空间为30M,而只剩下10M的Swap空间了,这时,如果有一

个进程开始运行并企图执行Malloc(15*1024*1024)的命令(分配15M空间),这个进程

会因为这个命令而失败 。

为什么呢?系统不是有30M可用的内存空间吗?原因在于:你的Swap空间不足,系统认为

你在分配空间以后,没有能力(空间)在发生页面交换时,将这部分数据保存起来,因此

认为你没有资格分配这块空间 。这不是太不公平了吧!也许这15M空间根本不用交换,当

前系统可是还有30M内存空间的富余啊!

还有更不公平的呢?有些大型系统配备了海量的内存,1G或4G,配了这么多内存就是为了

避免交换,提高运行速度,可是系统还要为这个系统分配并不需要的Swap空间,占用了

大量磁盘资源 。

为了弥补这个缺陷,Sun为Solaris 2 以后的版本设计了虚拟Swap空间 。所谓虚拟的

Swap空间,概念其实很简单,swap空间再也不是单指硬盘的分区或文件 。虚拟Swap空间

包含两个部分:部分物理内存和传统上的Swap分区 。经过适当的配置,可以使系统需要

Swap空间时,先使用内存部分的swap空间,如果内存部分的swap空间不够,再使用磁盘

部分的Swap空间 。这样,也许你硬盘上的Swap空间很少得到使用了,甚至根本不需要

Swap分区 。

Swap空间与TMPFS文件系统的关系

你知道吗?虚拟Swap空间与 /tmp目录有相当大的关系 。Sun在实现/tmp目录时,充分考

虑了应用程序运行的效率 。许多应用程序,特别是数据库服务都会频繁使用 /tmp目录作

为临时数据保存区,而Solaris将 /tmp目录下的文件都放在内存中而不是硬盘里,这样

会大大提高应用程序的效率 。但是/tmp目录的空间是从系统虚拟空间里挤出来的,是虚

拟Swap空间的一部分 。如果说,你用完了/tmp空间,也就是用完了Swap空间,所以要小

心监视系统的/tmp目录的使用情况,千万别用光了,否则系统会瘫痪!下面两点建议作为

参考:

1.在Mount /tmp目录时,使用(-o Size)选项来控制/tmp目录的大小 。

推荐阅读