Linux系统安装中Swap分区有什么用

75次阅读
没有评论

共计 3653 个字符,预计需要花费 10 分钟才能阅读完成。

丸趣 TV 小编给大家分享一下 Linux 系统安装中 Swap 分区有什么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

Swap 分区,即交换区,Swap 空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行 的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到 Swap 空间中,等到那些程序要运行时,再从 Swap 中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行 Swap 交换。其实,Swap 的调整对 Linux 服务器,特别是 Web 服务器 的性能至关重要。通过调整 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 空间太少,则系统会发生错误。

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

通常情况下,Swap 空间应大于或等于物理内存的大小,最小不应小于 64M,通常 Swap 空间的大小应是物理内存的 2 -2.5 倍。但根据不同的应用,应 有不同的配置:如果是小的桌面系统,则只需要较小的 Swap 空间,而大的服务器系统则视情况不同需要不同大小的 Swap 空间。特别是数据库服务器和 Web 服务器,随着访问量的增加,对 Swap 空间的要求也会增加,具体配置参见各服务器产品的说明。

另外,Swap 分区的数量对性能也有很大的影响。因为 Swap 交换的操作是磁盘 IO 的操作,如果有多个 Swap 交换区,Swap 空间的分配会以轮流的方 式操作于所有的 Swap,这样会大大均衡 IO 的负载,加快 Swap 交换的速度。如果只有一个交换区,所有的交换操作会使交换区变得很忙,使系统大多数时间 处于等待状态,效率很低。用性能监视工具就会发现,此时的 CPU 并不很忙,而系统却慢。这说明,瓶颈在 IO 上,依靠提高 CPU 的速度是解决不了问题的。

建立一个有连续空间的空白文件

服务器的物理内存是 512MB,按照 1.5~2 倍原则,我将 swap 文件设置为 1GB。

#root @aliyun :/srv# dd if=/dev/zero of=SWAPFILE bs=1024 count=1048576 1048576+0 records in 1048576+0 records out 1073741824 bytes (1.1 GB) copied, 59.7957 s, 18.0 MB/s #root@aliyun :/srv# dd if=/dev/zero of=SWAPFILE bs=1024 count=1048576 1048576+0 records in 1048576+0 records out 1073741824 bytes (1.1 GB) copied, 59.7957 s, 18.0 MB/s

使用 swap 文件

使用 swapon 命令让系统使用这个文件作为 swap 文件。但是这个文件不能直接使用,否则会报错:

root @aliyun :/srv# swapon swapfile swapon: /srv/swapfile: read swap header failed: Invalid argument root@aliyun:/srv# swapon swapfile swapon: /srv/swapfile: read swap header failed: Invalid argument

必须先使用 mkswap 将文件格式化成 swap 格式(不知道为什么会少了 4KB):

root @aliyun :/srv# mkswap SWAPFILE 1048576 Setting up swapspace version 1, size = 1048572 KiB no label, UUID=1aaed031-33ef-479b-a9a4-2f008a7bbb2f root@aliyun:/srv# mkswap SWAPFILE 1048576 Setting up swapspace version 1, size = 1048572 KiB no label, UUID=1aaed031-33ef-479b-a9a4-2f008a7bbb2f

使用格式化完毕的文件:

root @aliyun :/srv# swapon SWAPFILE root@aliyun:/srv# swapon SWAPFILE

查看文件使用情况:

root@aliyun:/srv# swapon -s Filename Type Size Used Priority /srv/SWAPFILE file 1048572 95852 -1 root@aliyun:/srv# swapon -s Filename Type Size Used Priority /srv/SWAPFILE file 1048572 95852 -1

加入自动启用

为避免重启后 swapfile 生效,可以将启用 swap 的代码加入启动文件中,对于 ubuntu server,编辑 /etc/rc.local 文件,加入以下内容(具体文件路径自定):

swapon /srv/SWAPFILE swapon /srv/SWAPFILE

或者

修改 /etc/fstab 文件,加入以下内容:

/srv/SWAPFILE swap swap defaults 0 0 /srv/SWAPFILE swap swap defaults 0 0

看完了这篇文章,相信你对“Linux 系统安装中 Swap 分区有什么用”有了一定的了解,如果想了解更多相关知识,欢迎关注丸趣 TV 行业资讯频道,感谢各位的阅读!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-25发表,共计3653字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)