jasmine214--love

只有当你的内心总是充满快乐、美好的愿望和宁静时,你才能拥有强壮的体魄和明朗、快乐或者宁静的面容。
posts - 731, comments - 60, trackbacks - 0, articles - 0

linux swap分区作用

Posted on 2010-12-30 17:01 幻海蓝梦 阅读(4348) 评论(0)  编辑  收藏 所属分类: Linux
新的 Ubuntu 9.04 发布后,我立刻就开始了体验。不得不说,较最近的 8.10 版,Ubuntu 9.04 的启动与运行速度都有了不少提高。
重 新给笔记本分区安装新系统时,遇到了是否该给硬盘划分 swap(交换空间)分区的问题,因为之前从不少地方都曾见到过物理内存足够大,便可不必划分 swap 分区的评论。相对于大内存,我这台机器的 2GB 内存应该算是不小,但最终还是留出了 1GB 划分给了 swap 分区。从网络上得到一些保留 swap 的理由。
Linux divides its physical RAM (random access memory) into chucks of memory called pages. Swapping is the process whereby a page of memory is copied to the preconfigured space on the hard disk, called swap space, to free up that page of memory. The combined sizes of the physical memory and the swap space is the amount of virtual memory available.
Linux 把物理内存划分作称为分页(Page)的内存区块。内存交换是一个内存分页被复制到一个预配置的称为 swap 空间的硬盘空间里的过程,以此来释放内存分页。物理内存与这个 swap 空间的共同大小称为可用的虚拟内存量。

在这里,保留 swap 分区有两个重要的原因。

其一,当物理内存不足以支撑系统和应用程序(进程)的运作时,这个 swap 空间可以用作临时存放使用率不高的内存分页,把腾出的内存交给急需的应用程序(进程)使用。

再有,即使你的机器拥有足够多的物理内存,也有一些程序会在它们初始化时残留的极少再用到的内存分页内容转移到 swap 空间,以此让出物理内存空间。对于有发生内存泄漏几率的应用程序(进程),swap 空间更是重要,因为谁也不想看到由于物理内存不足导致系统崩溃。

如果你需要在 Ubuntu 下跑虚拟机或者常用休眠(Hibernate),推荐划分 swap 空间。



如果在使用过程中想要清空 swap 空间,可以先禁用 swap,然后再次启用。以 Ubuntu为例,

sudo swapoff -a
sudo swapon -a
通过系统监视器,例如 gnome-system-monitor,你就可以看到 swap 空间的内容被转移到了物理内存中。
可能也许你不习惯把一个分区留给 swap,那么也可以使用一个文件作为 swap 空间,设置方法如下。但是这样确实不如 swap 分区的性能来得好。
打开控制台,创建一个 512MB 的文件用作 swap:
sudo dd if=/dev/zero of=/mnt/512Mb.swap bs=1M count=512
格式化这个 swap 文件作为内存交换设备:
sudo mkswap /mnt/512Mb.swap
添加这个 swap 文件到系统:
sudo swapon /mnt/512Mb.swap
* 要在开机时就使用这个 swap 文件,需要编辑配置文件:
gksudo gedit /etc/fstab
* 在 /etc/fstab 最末加入这一行:
/mnt/512Mb.swap none swap sw 0 0
重启即可生效。

************************************************************************************************************************
 Swap,即交换区,除了安装Linux的时候,有多少人关心过它呢?其实,Swap的调整对Linux服务器,特别是Web服务器的性能至关重要。通过调整Swap,有时可以越过系统性能瓶颈,节省系统升级费用。

  Swap的原理是一个较复杂的问题,需要大量的篇幅来说明。在这里只作简单的介绍,在以后的文章中将和大家详细讨论Swap实现的细节。

  众所周知,现代操作系统都实现了“虚拟内存”这一技术,不但在功能上突破了物理内存的限制,使程序可以操纵大于实际物理内存的空间,更重要的是,“虚拟内存”是隔离每个进程的安全保护网,使每个进程都不受其它程序的干扰。

  Swap空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释 放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到 内存中。这样,系统总是在物理内存不够时,才进行Swap交换。

  计算机用户会经常遇这种现象。例如,在使用Windows系统时,可以同时运行多个程序,当你切换到一个很长时间没有理会的程序时,会听到硬盘 “哗哗”直响。这是因为这个程序的内存被那些频繁运行的程序给“偷走”了,放到了Swap区中。因此,一旦此程序被放置到前端,它就会从Swap区取回自 己的数据,将其放进内存,然后接着运行。

  需要说明一点,并不是所有从物理内存中交换出来的数据都会被放到Swap中(如果这样的话,Swap就会不堪重负),有相当一部分数据被直接交换到文件系统。 例如,有的程序会打开一些文件,对文件进行读写(其实每个程序都至少要打开一个文件,那就是运行程序本身),当需要将这些程序的内存空间交换出去时,就没 有必要将文件部分的数据放到Swap空间中了,而可以直接将其放到文件里去。如果是读文件操作,那么内存数据被直接释放,不需要交换出来,因为下次需要 时,可直接从文件系统恢复;如果是写文件,只需要将变化的数据保存到文件中,以便恢复。但是那些用malloc和new函数生成的对象的数据则不同,它们 需要Swap空间,因为它们在文件系统中没有相应的“储备”文件,因此被称作“匿名”(Anonymous)内存数据。这类数据还包括堆栈中的一些状态和 变量数据等。所以说,Swap空间是“匿名”数据的交换空间。

  突破128M Swap限制

  经常看到有些Linux(国内汉化版)安装手册上有这样的说明:Swap空间不能超过128M。为什么会有这种说法?在说明“128M”这个数字的来历之前,先给问题一个回答:现在根本不存在128M的限制!现在的限制是2G!

  Swap空间是分页的,每一页的大小和内存页的大小一样,方便Swap空间和内存之间的数据交换。旧版本的Linux实现Swap空间时,用 Swap空间的第一页作为所有Swap空间页的一个“位映射”(Bit map)。这就是说第一页的每一位,都对应着一页Swap空间。如果这一位是1,表示此页Swap可用;如果是0,表示此页是坏块,不能使用。这么说来, 第一个Swap映射位应该是0,因为,第一页Swap是映射页。另外,最后10个映射位也被占用,用来表示Swap的版本(原来的版本是 Swap_space ,现在的版本是swapspace2)。那么,如果说一页的大小为s,这种Swap的实现方法共能管理“8 * ( s - 10 ) - 1”个Swap页。对于i386系统来说s=4096,则空间大小共为133890048,如果认为1 MB=2^20 Byte的话,大小正好为128M。

  之所以这样来实现Swap空间的管理,是要防止Swap空间中有坏块。如果系统检查到Swap中有坏块,则在相应的位映射上标记上0,表示此页不可用。这样在使用Swap时,不至于用到坏块,而使系统产生错误。

  现在的系统设计者认为:

  1.现在硬盘质量很好,坏块很少。

  2.就算有,也不多,只需要将坏块罗列出来,而不需要为每一页建立映射。

  3.如果有很多坏块,就不应该将此硬盘作为Swap空间使用。

  于是,现在的Linux取消了位映射的方法,也就取消了128M的限制。直接用地址访问,限制为2G。

  Swap配置对性能的影响

  分配太多的Swap空间会浪费磁盘空间,而Swap空间太少,则系统会发生错误。 如果系统的物理内存用光了,系统就会跑得很慢,但仍能运行;如果Swap空间用光了,那么系统就会发生错误。例如,Web服务器能根据不同的请求数量衍生出多个服务进程(或线程),如果Swap空间用完,则服务进程无法启动,通常会出现“application is out of memory”的错误,严重时会造成服务进程的死锁。因此Swap空间的分配是很重要的。

原文;http://linux.ctocio.com.cn/301/8790801.shtml



只有注册用户登录后才能发表评论。


网站导航: