Today I have seek one article about the swap space upon Solaris system. it's very useful for us to clarify the doubt about it.
文章如下:来自Ricky
最近被问到Solaris上的Space和Memory信息,发现很多信息不一致,比如top看到的swap和memory信息跟vmstat看到
的信息不同,如何知道具体服务器用了多少swap,还有多少swap?实际物理内存到底是多少?做了一点功课,总结一下:
首先Solaris上的Swap跟普通的Linux上的swap机制有一点不同,Solaris上的swap用的是一个Virtual Swap
Space概念,原因如下:
假设系统当前还有可用的内存空间为30M,而只剩下10M的Swap空间了,这时,如果有一个进程开始运行并企图执行
Malloc(15*1024*1024)的命令(分配15M空间),这个进程会因为这个命令而失败。
为了弥补这个缺陷,Sun为Solaris 2
以后的版本设计了虚拟Swap空间。所谓虚拟的Swap空间,概念其实很简单,swap空间再也不是单指硬盘的分区或文件。虚拟Swap空间包含两个部
分:部分物理内存和传统上的Swap分区。经过适当的配置,可以使系统需要Swap空间时,先使用内存部分的swap空间,如果内存部分的swap空间不
够,再使用磁盘部分的Swap空间。这样,也许你硬盘上的Swap空间很少得到使用了,甚至根本不需要Swap分区。
但是,还有需要注意的就是,
并不是所有从物理内存中交换出来的数据都会被放到Swap中(如果这样的话,Swap会不堪重负),有相当一部分的数据直接交换到文件系统。例如,有的程
序会打开一些文件,对文件进行读写(其实每个程序都至少打开一个文件,那就是运行程序本身),当这些程序的内存空间需要交换出去时,文件部分的数据就没有
必要放到Swap空间中了,如果是读文件操作,那么内存数据直接就释放了,不需要交换出来,因为下次需要时,直接从文件系统就能恢复;
如果是写文件,只需要将变化的数据保存到文件中,以便恢复。但是那些用malloc(3C)和new函数生成的对象的数据则不同,需要Swap空间,因为
它们在文件系统中没有相应的“储备”文件,因此被称为“匿名”(Anonymous)的内存数据,这类数据还包括堆栈中的一些状态和变量数据等,所以说,
Swap空间是“匿名”数据的交换空间。
看了一堆的理论解释,有点糊涂,还是用数字来说话吧,在Solaris下,swap命令是用来查看当前系统中的swap信息的。
之前一直理解的-l 参数和-s参数表达的是同样的意思,其实区别就在这里,一个查看的是物理的swap space,一个是当前系统的virtual
swap space,弄清楚这个,前面的就好解释了。
# swap -l
查看的是物理交换分区
#swap -s
查看的是虚拟交换空间
虚拟交换空间=物理交换分区+部分物理内存 (这里的部分物理内存,我理解为当前free的physical内存,不知道是否确切?)
比如我一台机器,有8G物理内存(可以通过prtdiag | grep Mem得到)
# swap -l
swapfile dev swaplo blocks free
/dev/dsk/c2t1d0s0 118,32 16 71127152 71127152
这里配置了一个swap device, 大小是36G,注意上面的单位是block, 1block=512byte
# swap -s
total: 1831680k bytes allocated + 546192k reserved = 2377872k used,
39440480k available
#
这里看到的系统当前的可用的virtual swap space是39G,已经使用2G多。从下面的计划可以验证这个
vmstat可以看到当前的的free memory
71127152/2 ( swap device ) + free physical memory (8G – 5237240) =
40800816 (virtual swap space)
从swap -s得到的结果是 2377872k+39440488k =41818360
两者是基本相等的。进一步验证了这个计算是正确的。
另外需要说明几点:
1
另外,Swap分区的数量对性能也有很大的影响。因为Swap交换的操作是磁盘I/O的操作,如果有多个Swap交换区,Swap空间的分配会以轮流的方
式操作于所有的Swap,这样会大大均衡I/O的负载,加快Swap交换的速度。如果只有一个交换区,所有的交换操作会使交换区变得很忙,使系统大多数时
间位于等待状态,效率很低,用性能监视工具就会发现,此时的CPU并不很忙,而系统却慢,这说明,瓶颈在I/O上,依靠提高CPU的速度是解决不了问题
的。
2 虚拟Swap空间与
/tmp目录有相当大的关系。Sun在实现/tmp目录时,充分考虑了应用程序运行的效率。许多应用程序,特别是数据库服务都会频繁使用/tmp目录作为
临时数据保存区,而Solaris将/tmp目录下的文件都放在内存中而不是硬盘里,这样会大大提高应用程序的效率。
当系统的swap 不够的时候,可以通过两种方式增加:swap device或者swap
file,下面就说一下如何通过命令的方式增加swap file:
# mkdir /files
# mkfile 24m /files/swapfile
# swap -a /files/swapfile
# vi /etc/vfstab
(An entry is added for the swap file):
/files/swapfile – – swap – no -
# swap -l
swapfile dev swaplo blocks free
/dev/dsk/c0t2d0s1 32,17 8 205624 192704
/files/swapfile – 8 40952 40952
相反的,删除一个swap file的方法在下面。
# swap -d /files/swapfile
# (Remove the deleted swap entry from the /etc/vfstab file)
# rm /files/swapfile
# swap -l
swapfile dev swaplo blocks free
/dev/dsk/c0t2d0s1 32,17 8 205624 192720
详细的note,也可以参考这
里
或者Solaris的官方文档
分享到:
相关推荐
本文介绍了在Solaris平台上Swap(交换)空间的基本概念、实现的原理以及对Swap(交换)空间进行监控的方法和调整的策略。
1.su - root 2.创建SWAP文件 mkfile nnn filename mkfile 100m swapfile 3.激活swap ... -d (删除多余swap空间) 4. vi /etc/vfstab /path/filename - - swap - no - 5. 检验 /usr/sbin/swap -l
SUSE上扩容Swap空间方法,让你真正体验Linux系统的强大吧。
如果你的硬盘空间已经全部分配给其他分区,也没有多余的预算新添购硬盘,可以利用swap文件的方式增加虚拟的swap空间,不过执行性能会较实际的swap分区差。
centos7配置swap交换内存空间 centos7配置swap交换内存空间 centos7配置swap交换内存空间
windows下浏览ext、swap分区
Linux的SWAP空间有两种创建方法,分别为分区型和文件型,也就是说提供做为SWAP的空间可以由分区与文件的形式提供!本文简单介绍了这两种SWAP空间创建方法。
那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间 中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换...
Linux系统增加swap空间方法,请有需要的朋友们尽快下载 Linux系统增加swap空间方法,请有需要的朋友们尽快下载
swap电路:当输入c=0时,输出x等于输入a,输出y等于输入b。当输入c=1时,则交换两输出,即输出y等于输入a
SAP note 1597355 Swap-space recommendation for Linux
如果swap空间不够,增加swap.txt
swap logisim emmm 电路
用于查看LINUX下进程占用SWAP大小
增大swap分区.txt增大swap分区.txt增大swap分区.txt增大swap分区.txt增大swap分区.txt增大swap分区.txt增大swap分区.txt增大swap分区.txt增大swap分区.txt
修改swap分区大小方法,如果安装完linux后感觉swap分区不够用,可以尝试此方法。
linux扩展linux swap分区和根目录空间不足
使用python完成的faceswap程序,使用单张图片完成对人脸的三维建模
Linux修改Swap大小.
虚拟机增加磁盘空间后SWAP分区不能挂载怎么办?.docx