admin 管理员组

文章数量: 887019


2024年3月28日发(作者:mysqloracle的区别)

最近看到有朋友在我的Blog中问关于Linux环境下swap分区设置的问题,问题如下:“需

要设置一个10G的swap分区,是设置成单个10G的好呢,还是5个2G的,还是其他的方案,

比如2个5G的分区?”

看来有必要再写一篇Blog来阐述一下这个问题。

在网络上我经常看到这样的经典问答:

问:我的内存大小是xxx,那么我建立的swap多少才合适?

答:大概物理内存的1倍即可。

我认为这种回答是很不负责任的,所谓1倍内存大小或2倍内存大小的swap分区

设置,是给那些对Linux系统不是很熟悉的用户的简单建议,这种设置在桌面Linux下是没

有什么问题的,最多是占用一些硬盘空间而已。但是在真正的生产环境下,这种设置是很不

合理的一种设置。

一、swap分区大小是怎么确定的?

其实swap分区的大小设置是很考验Linux系统管理员水平的一件事情,swap的大

小是这样决定的:

( 内存大小 Swap分区大小 ) * 80%或70% >= 程序需要占用总内存数

如果系统内存大小已经大于系统中所有任务最大内存使用大小,那么就根本没有必

要设置swap分区了,如果这个时候设置上,那么就是白白占用了那些硬盘空间(当然,如

果硬盘足够富裕,可以忽略这些占用了)。

那么有的管理员就会说了:我不知道我系统中所有任务最大内存使用大小是多少

啊!

我在这里给你一个方法,可以找到这个大小是多少,下面跟着我一步一步来:

1、用swapoff 关掉所有swap 然后正常运行任务,如果出现内存不足的提示,就需要逐步

增加swap

2、一般来讲,物理内存达到256m,在安装时即可不用划分交换分区.。

3、可以在安装后建立交换分区,或者建立交换文件。

BTW:swap还有一个用处,就是在机器lock,出现问题的时候内存的内容会自动copy

到swap上面,这样可以有效防止机器故障带来内存中的内容忽然丢失的情况。

二、为什么swap分区不宜过大?

为什么 swap 分区不宜过大,这是由于 Linux 内存分配的特点——它会尽可能多

地使用内存(包括swap 分区)。尽量使用内存的目的是加快 IO 处理的速度,比如关掉一

个程序,原先占有的内存空间并不立即清空,下一次打开时就不用去硬盘找数据,而直接从

内存中读取。但是如果虚拟内存过大,那么保留在内存缓冲区中的数据实际上还是在硬盘中,

那对于加快速度就没有多大的作用了。

swap 分区对于物理内存小的机器是必不可少的,假设物理内存只有64M,而某个

程序启动最少要256M,如果没有足够的虚拟内存,这个程序是根本打不开的(系统会报内

存不足错误,甚至崩溃)。对于程序而言,物理内存和虚拟内存是没有任何区别的,它们只

关心空间是否够大。在物理内存够用的情况下可以适当分配一些空间给 swap ,这仅仅是为

了偶尔同时开很多大家伙时,防止出现内存不足错误。

三、swap是一个大分区还是多个小分区?

我记得有人说过在fedora和debian的文档中看到过说明,建议swap分区大小不

要超过2G。

为什么是2G呢?我觉得首先是由于32位机的文件偏移指针是个无符号整型,所以

单个文件偏移最大到2的31次方,也就是2G。其次,旧的文件系统对大文件的支持并不是

很好(有点类似Windows环境下FAT文件格式不能有文件大小限制),所以在文档中建议

swap分区大小不超过2G(要知道swap是可以在运行过程中动态加载swap文件的)。

如果各位使用的是2.4 内核或者64位的系统,那么可以放心地把swap分区设置

的足够大,IBM在针对其Linux 2.4 kernel的文档中明确表明,2.4.10及以后的linux kernel,

支持的每块swap最大不超过24GB。

下面再说说设置多个swap的好处,那就是可以把多个swap分担到多块硬盘上,如

果你有多个物理磁盘,建议在把swap分布到每块磁盘上,这时确实可以提高运行速度。


本文标签: 内存 分区 物理