另外,Swap分区的数量对性能也有很大的影响 。因为Swap交换的操作是磁盘I/O的操作,如果有多个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目录的大小 。
2.当使用编译器编译文件时,如果不想占用Swap空间,则用TMPDIR环境变量指向另外一个临时目录,而不是/tmp目录 。
推荐阅读
- Solaris 实现安装包的反安装
- 使用 Solaris 系统帮助
- Solaris 8 新增功能一览 其他软件
- groupadd,useradd Solaris 用户增加命令
- Solaris 提高文件系统的使用效率
- Solaris 域名系统配置
- Solaris 终端机常用控制键
- 给 Solaris 打补丁
- Solaris 系统性能维护
- Solaris 设置网卡IP地址
