Solaris性能监控的Swap空间管理( 二 )



另外,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目录 。;

推荐阅读