您的位置:首页 > 运维架构 > Linux

关于linux交换分区大小的问题

2010-07-03 10:28 337 查看
有点看不懂,先转来,日后慢慢研究

[精华] 关于linux交换分区大小的问题

http://www.chinaunix.net 作者:wangrujun 发表于:2008-08-04 17:44:50
发表评论】【查看原文】【Linux讨论区】【关闭
我在debian 和 fedora的文档中,都看到有说明,swap分区最好不要超过2G。

我想请问题一下,为何单个swap分区不要超过2G?如果超过2G会有什么问题?
另外,这个限制是只对ide硬盘而言,还是普遍的要求,即对scsi及raid盘都有这样的要求?

谢谢

我自逍遥 回复于:2005-05-17 15:14:51

我记得可swap可以是内存的两倍,如果再大就没有意义了。

双眼皮的猪 回复于:2005-05-17 15:26:47

我觉得SWAP到2G已经没有必要了.干脆就加内存算了,这么折腾它...

wangrujun 回复于:2005-05-17 16:20:47

我的linux服务器的内存是4G,呵呵

wangrujun 回复于:2005-05-17 16:22:10

在4G内存状况下,我计划分配4G交换区。
原本是打算用一个4G的交换区,但是看到上述文档中的描述,不知道是否应该分为两个2G的交换区。

采风 回复于:2005-05-17 16:42:58

交换文件的大小和你的应用需求有关,如果没有那么大的应用需求,象征性的分个几百M的交换文件就行了。 :roll:

wangrujun 回复于:2005-05-17 17:26:14

如果我有需求,需要8G的交换文件呢?

tigerlei 回复于:2005-05-17 17:36:53

你有这么大的内存,估计你没有什么交换分区需求的

wolf0403 回复于:2005-05-17 20:38:32

2G 是个很特殊的值,呵呵。好像跟是否启用大文件支持有关。2G 以上的文件需要大文件支持,速度会变慢。
另外,4G 的内存也需要打开 hi mem support 了

redspider 回复于:2005-05-17 22:41:05

引用:原帖由 "wangrujun"]如果我有需求,需要8G的交换文件呢?
发表:

有需求的话可以创建交换文件来增加交换区的容量

wangrujun 回复于:2005-05-18 10:05:37

引用:原帖由 "tigerlei"]你有这么大的内存,估计你没有什么交换分区需求的
发表:


我服你了。就算是一个试题,你看看应该怎么做?

wangrujun 回复于:2005-05-18 10:08:36

引用:原帖由 "wolf0403" 发表:
2G 是个很特殊的值,呵呵。好像跟是否启用大文件支持有关。2G 以上的文件需要大文件支持,速度会变慢。
另外,4G 的内存也需要打开 hi mem support 了


为何2G以上文件读写速度会变慢?

swap是对memory的映射,os做的是内存块对磁盘块的直接映射,又不需要查目录项,你说速度会变慢,原因何在?

wangrujun 回复于:2005-05-18 10:13:41

我把问题再整理一下,不要问我是否需要8G的swap,就算只是思考下这个问题好吗?

在debian 和 fedora的文档中,都看到有说明,swap分区最好不要超过2G。
假如我要建立8G的交换文件,现在有两种做法:
1. 直接建立8G的交换文件,这在ext3文件系统中是被支持的。。
2. 建立4个2G的交换文件。

现在,我们从performance的角度来看debian和fedora文档中的说明,考虑他们如此约定的原因:
1. 为何swap不要超过2G,即超过2G会出什么问题?
2. 这个限制是只对ide硬盘而言,还是普遍的要求,即对scsi及raid盘都有这样的要求?

chenzq1604 回复于:2005-05-18 10:27:36

swap是硬盘不是内存,理论上至少比内存慢100倍,比如写个2G的大型的文件先要把2G写到硬盘中的swap上,再写到内存,如果内存数据也比较满(别的进程也在读写),所以一次性写不完要分成N次,造成系统缓慢,这还没有加上什么优先级更高的进程打段之类的意外

daniel2000 回复于:2005-05-18 10:36:10

我觉得如果4G内存+2GSWAP还不够用的话应该考虑使用集群而不是再加内存了...

双眼皮的猪 回复于:2005-05-18 10:40:13

大文件支持跟文件系统我不太熟悉,
但是32位机的文件偏移指针是个无符号整型...
所以单个文件偏移最大到2的31次方...也就是2G...
与文件系统的联系不太清楚,研究研究再发话^_^

我觉得4G MEM够了...

wangrujun 回复于:2005-05-23 15:54:33

感谢您的回答。
引用:原帖由 "chenzq1604"]swap是硬盘不是内存,理论上至少比内存慢100倍
发表:


我知道swap是硬盘,也知道它比内存慢得多,不过不是慢100倍。
内存访问速度的单位是ns,而硬盘访问速度的单位是 ms
1ns = 1000,000 ms,你可计算一下到底慢多少倍

引用:原帖由 "chenzq1604"]比如写个2G的大型的文件先要把2G写到硬盘中的swap上,再写到内存,如果内存数据也比较满(别的进程也在读写),所以一次性写不完要分成N次,造成系统缓慢,这还没有加上什么优先级更高的进程打段之类的意外
发表:


好的,就说说你的这个例子。我想你要说的是内存换页的例子。用写文件的例子是不合适的,因为写文件的时候,会分段写入io buf,而不会把2G的文件一次读入硬盘再写入。io buf通常已经是被系统预留的。

我想可以举这样的例子,你用mmap来读入一个2G的文件,而你的系统上,mmap的实现会把2G内存一次性读入内存中。
那么你的意思是交换分区会使系统变慢是吧。可是如果没有交换分区,你上面说的状况,会有什么结果你知道吗?
你上面的状况,因为mmap无法申请到足够内存,它会直接crash。这样对于系统是灾难性的。两者相比,还是有swap的情况更好。管理员可以通过swap的使用状况,了解到系统问题所在,从而获得处理问题的时间。

wangrujun 回复于:2005-05-23 15:57:24

引用:原帖由 "daniel2000"]我觉得如果4G内存+2GSWAP还不够用的话应该考虑使用集群而不是再加内存了...
发表:


为什么会这样说?道理说出来听听!

wangrujun 回复于:2005-05-23 15:58:54

引用:原帖由 "双眼皮的猪" 发表:
大文件支持跟文件系统我不太熟悉,
但是32位机的文件偏移指针是个无符号整型...
所以单个文件偏移最大到2的31次方...也就是2G...
与文件系统的联系不太清楚,研究研究再发话^_^


你说的其实是文件系统的具体实现。ext3已经突破2G的限制,所以你的问题不必担心。

wangrujun 回复于:2005-05-23 16:11:18

首先谢谢各位的回复。现在我想说明一下swap和内存的关系,抛砖引玉,欢迎大家批评指正。

经验证明,swap比内存大1.8-2.5倍比较好,如果超过2.5倍,performace会变差。

ok, 某台server有128M内存,4G swap,swap是内存的32倍,看来管理员的脑袋进水了。但是反过来看看,这台机器就一定会慢吗?

回答当然是:no!
大家不要把os想的那样弱。os 只是在 memory不够的时候, 会收到memory不够的中断信息,这时os才会去使用swap。如果上面的配置,只是用来架一个流量不大的dns server,它的performance不会差。 因为它基本不用或者只用很少的swap,内存换页不会造成系统处于颠簸状态。

反过来说,我有4G内存,配置8G甚至10G的swap都不为过。即然配置这些swap,不会使server的performance降低,又能增强系统对内存的突发性需求的应对能力,难道在硬盘普遍过百G的今天,我们非要省这区区数G的硬盘吗?

再次重复我的问题:
在debian 和 fedora的文档中,都看到有说明,swap分区最好不要超过2G。
假如我要建立8G的交换文件,现在有两种做法:
1. 直接建立8G的交换文件,这在ext3文件系统中是被支持的。。
2. 建立4个2G的交换文件。

现在,我们从performance的角度来看debian和fedora文档中的说明,考虑他们如此约定的原因:
1. 为何swap不要超过2G,即超过2G会出什么问题?
2. 这个限制是只对ide硬盘而言,还是普遍的要求,即对scsi及raid盘都有这样的要求?

網中人 回复于:2005-05-23 17:05:51

嗯. 對 swap 的需求上, 一直都沒個確切的說法.
之前在國外看過 linus 本人有討論過這一問題, 但是很複雜, 很深入. 我也看不懂.... >;_<

不過, 若撇開理論的爭議, 回歸到現實面, 不妨讓我們確切的了解系通的實際需求或更好些.
1) 系統對內存需求的最高峰值是多少?
2) peak load 的持續期間有多長?
3) 每天/每週平均內存消耗值是多少?
4) 數據採樣期有多長? 代表性如何?
5) 擴充預估值有多少? 根據若何?
6) 現有內存有多少? 能否超過最高峰值需求?
7) swap 在峰值期間消耗多少? 目前夠用否? 擴充預估要多少?
8) 消耗內存的前 10 個程序是哪些? 獨立追縱出來的使用曲線如何?
9) 有否其它參照系統可供比較?
10) .....

我想, 作為系統分析員, 都不能夠離開據體數據來扯一通吧?
經驗與理論可幫助我們更精確的作出預估. 但實體數據才是最具說服力的支持.

我對 swap 的理論沒有多大研究.
但如果系統最高峰值是 6G 內存,
當我只有 4G 時, 我再建一個 3 G swap 總可應付得來吧?
還是說, 一定要建 8G 呢?
那, 當 6G 峰值不變, 而實體内存有 8G , 那我是否要建 16G swap ?
那, 我有 100G 內存時呢?
又, 若系統一輩子最高也只用到 128M , 那我的 4G 內存真的還有需要 swap 否?
更甚至 我將之降為 256M 行不行呢?

簡單來說, 我個人認為: swap 不應作為常態性使用, 只應用來在短暫性最高峰值時的備援.
也就是: swap 需備, 但最好好備而不用!

因為沒理論支持, 我不敢說我的認知是合理的. 有能力的朋友, 可否就上術的問題為大家說明一下呢? 謝謝囉.... ^_^

wangrujun 回复于:2005-05-26 12:05:36

引用:原帖由 "網中人" 发表:

我想, 作為系統分析員, 都不能夠離開據體數據來扯一通吧?
經驗與理論可幫助我們更精確的作出預估. 但實體數據才是最具說服力的支持.


swap的使用,现在大家都取1.8-2.5倍,是一个经验值。swap是由os进行调度和使用,与具体应用关联有限。
另外, 全面performance当然需要观察具体情况,可是大部分情况是这样:管理员首先会对应用做预估,安装机器,具体数据要上线后才能观察到。
那些管理员在预估阶段,只能根据经验值来对系统进行规划。

引用:原帖由 "網中人" 发表:

但如果系統最高峰值是 6G 內存,
當我只有 4G 時, 我再建一個 3 G swap 總可應付得來吧?
還是說, 一定要建 8G 呢?
......
簡單來說, 我個人認為: swap 不應作為常態性使用, 只應用來在短暫性最高峰值時的備援.
也就是: swap 需備, 但最好好備而不用!


我想强调这样一个问题:比如你有128M内存,建立了1Gswap,而系统只用了128Mswap,这时系统performance不会下降。管理员只是浪费了少许硬盘。具体可看我前面的论述。

系统最高峰值是6G,而你的内存是4G,我觉得你还是应该建立6-8G的swap。因为在此swap使用范围内,这个系统的performance是可接受的,swap不会造成系统瓶颈。
而对于系统来说,所谓的最高峰值只是估计值。比如跑数据库,长年累月积累下来,数据量会不断增加。难保有个程序员,在查询时漏掉了年份之类的条件,或者犯下其它未测试出来的问题,造成负载加大。这时你的3G swap,就远不如8G swap有保障。最起码,8G swap会因为swap使用变多,而造成性能缓慢下降,给管理员发现问题的时间。而3G的swap,则有可能会造成查询故障。

这里只是一个例子而已。况且,我的问题已经说了很多次,是讨论swap是否可以突破2G这个大小。按照网中人老兄的说法,建立3G的swap,那么是应该建立2G+1G还是一个3G呢?

其实这才是我本来问的问题。网中人和其他许多兄弟,只看到打口水仗,却没有真正关注这个本来的问题,让我有些失望。

网中人老兄在chinaunix是出名的好脾气,希望不会因此而生气。

網中人 回复于:2005-05-26 13:08:30

第一, 我沒理由生氣.
第二, 我有沒只看到口水仗, 不是由你來下定論的.
第三, 我也有不明, 才來問你.
第四, 我也同樣失望.

wangrujun 回复于:2005-05-26 13:40:11

嘻嘻,网中人就是好脾气

wolfop 回复于:2005-05-26 16:38:03

引用:原帖由 "wangrujun"]如果我有需求,需要8G的交换文件呢?
发表:


如果是64BIT内核,8GSWAP没有任何问题。
如果撒32位内核,使用超过4G以上内存采用PAE模式,无法使用超过4G SWAP。

網中人 回复于:2005-05-27 01:59:54

引用:原帖由 "wangrujun"]嘻嘻,网中人就是好脾气
发表:


呵... 居然有人說我好脾氣呢.... 你真會逗我開心!

不過, 我前面問了一堆, 你還沒教我呢?
能否抽空幫忙解答一下呢?
(別想太多, 我也是不懂, 才求教的.)

至於峰值, 我想, 不管是假設的, 還是實際的, 你就胡亂給一個值, 取最大值就是了.
別再給我繞圈圈走花園了...
若 6G 不夠, 你就給我扯個 60G 也行.
我也不管是 OS 還是 application, 我只盯著"total mem usage"來看, 其他我不管.
swap 單一多大? 也不是我操心的... 誰管你是 2+1 還是 3x1 呢...
等你的值算(或看)出來, 有了答案, 我才操心下一步該怎麼做...
天都還沒塌, 就別爭說哪個地洞好鑽啦. 這樣說, 你可明白嗎?

zonzi 回复于:2005-05-27 04:34:49

根据我对swap区的理解就是
swap区是linux实行virtual memory用的
virtual memory 则是因为内存不够,来虚拟内存的
一般x86 32位芯片最多只能支持2G内存。。。。。。。。。。。。。

soway 回复于:2005-05-27 21:11:28

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

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

这个我忘记是哪儿看的了,反正当时感觉很有道理

zcfunix 回复于:2005-05-27 22:46:07

如果是64BIT内核,8GSWAP没有任何问题。
如果撒32位内核,使用超过4G以上内存采用PAE模式,无法使用超过4G SWAP

zcfunix 回复于:2005-05-27 22:48:08

引用:原帖由 "soway" 发表:
swap还有一个用处
就是在机器lock,出现问题的时候内存的内容会自动copy到swap上面

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

这个我忘记是哪儿看的了,反正当时感觉很有道理


wangrujun 回复于:2005-05-30 09:47:23

引用:原帖由 "wolfop" 发表:

如果是64BIT内核,8GSWAP没有任何问题。
如果撒32位内核,使用超过4G以上内存采用PAE模式,无法使用超过4G SWAP。


多谢。我是intel的cpu,32位的内核。
pae模式不知为何物,会查阅资料增加了解。

wangrujun 回复于:2005-06-02 13:29:36

wolfop:
pae有扩展模式。因为pae支持36根地址线而不是32根,所以使用pae扩展模式的linux 2.6kernel,就可以支持到64G

所以,您说的8G内存限制是不存在的。

wangrujun 回复于:2005-06-02 13:32:57

帖子在这里这样久,我这里说明一下我的看法。

linux 2.6以上的内核,可以直接支持不小于64G的内存。ext3等日志型文件系统,也可以直接支持超过2G的单个文件,所以,对于64G以内的swap,在文件系统支持的情况下,建立成一个单独的分区或文件,不会影响系统的performace。

按照我问题中的需求,可以直接建立一个8G的分区或者8G的交换文件。

wangrujun 回复于:2005-06-02 13:34:20

至于 debian和fodera文档中所说的限制,我的看法是,它们出版的较早,在ext2文件系统下或2.4内核中,都是正确的。
在ext3文件系统+2.6内核中,应该是不必要做此限制的。

wangrujun 回复于:2005-06-02 13:44:26

网中人老兄,偶觉得你说的有道理,系统的swap应该要看负载而定。
我是想问问设置超过2G的swap,这个运作本身对系统的performance有没有影响。完全是因为debian的手册上说不要超过2G比较好的。

Forget&Reme 回复于:2005-06-02 13:50:49

引用:原帖由 "wangrujun" 发表:
网中人老兄,偶觉得你说的有道理,系统的swap应该要看负载而定。
我是想问问设置超过2G的swap,这个运作本身对系统的performance有没有影响。完全是因为debian的手册上说不要超过2G比较好的。


I use a single swap partition which size is 4G for a long time.And I have 4G physics mem too,There is nothing wrong with my rh8.

wangrujun 回复于:2005-06-07 11:37:47

谢谢楼上
4G memory配置 4G swap是oracle文档中推荐的配置,您是用oracle吧

Forget&Reme 回复于:2005-06-07 11:44:18

引用:原帖由 "wangrujun" 发表:
谢谢楼上
4G memory配置 4G swap是oracle文档中推荐的配置,您是用oracle吧


Oh,no.I use it as a application server.

jordn 回复于:2005-06-07 12:55:44

学习中。。。

wolfop 回复于:2005-06-07 14:23:25

引用:原帖由 "wangrujun" 发表:
wolfop:
pae有扩展模式。因为pae支持36根地址线而不是32根,所以使用pae扩展模式的linux 2.6kernel,就可以支持到64G

所以,您说的8G内存限制是不存在的。


pae的机制远比你描述的复杂,它的特性类似以前16位DOS下面使用XMS的机制。很多OS对PAE的支持要求4G以上的部分必须是物理内存,而且不是虚拟内存。

ttvast 回复于:2005-06-07 14:26:11

SWAP的大小和内存寻址的大小毫无关系啊,一个SWAP分区又不是只给一个进程空间使用的.

wangrujun 回复于:2005-06-22 10:03:33

引用:原帖由 "wolfop" 发表:

pae的机制远比你描述的复杂,它的特性类似以前16位DOS下面使用XMS的机制。


我恰好对xms机制比较熟悉。我是286的机器用过来的。想当初硬盘也只有4M呀。
xms只不过是在地址线上做了手脚,没有觉得复杂到哪里去。这种技术实现已经久经考验。

引用:原帖由 "wolfop" 发表:

很多OS对PAE的支持要求4G以上的部分必须是物理内存,而且不是虚拟内存。


我没有看到说,linux os对扩展PAE要求物理内存。
不知道是否是这样?

wangrujun 回复于:2005-06-22 10:05:35

引用:原帖由 "ttvast"]SWAP的大小和内存寻址的大小毫无关系啊,一个SWAP分区又不是只给一个进程空间使用的.
发表:


有些道理。一个进程空间确实很难用完4G的。

那么这样看起来,debain手册中要求swap最好是2G以下,是不是有问题呢?

kecai_cale 回复于:2005-06-22 11:20:28

看后大受启发,建议加精!

xinyv 回复于:2005-06-22 13:06:32

记得一个朋友在用数据库的时候碰到了一个问题,就是单个库文件超过了2G
后来请教了人,记得他们好象说EXT3文件系统对单个文件2G以上的数据文件支持不太好,让改成ReiserFS文件系统了,不知道这个对楼主是否有帮助,个人意见,仅供参考呀。

TCBY 回复于:2005-06-22 13:47:25

最好不要超过2G
否则有可能会发生意想不到的事情
我试过分4G,怎么也装不上系统,改成2G后可以
原因:不明

peng 回复于:2005-06-22 14:49:11

引用:原帖由 "xinyv" 发表:
记得一个朋友在用数据库的时候碰到了一个问题,就是单个库文件超过了2G
后来请教了人,记得他们好象说EXT3文件系统对单个文件2G以上的数据文件支持不太好,让改成ReiserFS文件系统了,不知道这个对楼主是否有帮助,个?.........


和楼主讨论的是两码事。。

oracle不能生成2g的单独文件,有两个方面。

1、系统划分硬盘文件系统的时候,系统本身不支持2g文件。
2、oracle版本问题,32位的oracle也不能生成2g的数据,64bit的数据库可以。

wangrujun 回复于:2005-06-22 16:39:39

引用:原帖由 "TCBY" 发表:
最好不要超过2G
否则有可能会发生意想不到的事情
我试过分4G,怎么也装不上系统,改成2G后可以
原因:不明


我用ext3 文件系统,8G swap,安装没有问题。目前运行也没有问题。

st690714 回复于:2005-06-22 16:43:23

软件开发老比硬件慢一步

TCBY 回复于:2005-06-22 21:56:56

引用:原帖由 "wangrujun" 发表:

我用ext3 文件系统,8G swap,安装没有问题。目前运行也没有问题。


所以我说意想不到 :D

孤城 回复于:2005-06-23 10:32:50

学到不少知识

零二年的夏天 回复于:2005-06-23 13:53:11

执著,专注!

值得学习!

xinyv 回复于:2005-06-23 14:03:35

引用:原帖由 "peng" 发表:

1、系统划分硬盘文件系统的时候,系统本身不支持2g文件。
2、oracle版本问题,32位的oracle也不能生成2g的数据,64bit的数据库可以。


不好意思,我对文件系统不太懂.
想在请教一下,如上面说,如果我的交换分区建的小了,想扩大,我可以用添加交换文件的方法解决,那如过我要添加4G的交换文件是不是就得添加2个,8G的就添加4个呢?

wangrujun 回复于:2005-06-24 10:42:05

xinyv:
可以建立4个G的交换文件,完成后激活就可以。

wangrujun 回复于:2005-07-11 11:17:39

关于本贴的最后答案,来自于Linus Torvalds和他的朋友们的讨论

引用:
2. Greater 2.4 Swap Requirements
7 Jan 2001 - 18 Jan 2001 (100 posts) Archive Link: "Subtle MM bug"
Topics: Virtual Memory
People: Rik van Riel, Linus Torvalds, Eric W. Biederman, Zlatko Calusic

In the course of discussion, it became clear that Linux 2.4.x required more swap than previous versions. Rik van Riel mentioned, "2.4 keeps dirty pages in the swap cache, so you will need more swap to run the same programs..." He asked Linus Torvalds, "is this something we want to keep or should we give the user the option to run in a mode where swap space is freed when we swap in something non-shared ?" Linus replied:

I'd prefer just documenting it and keeping it. I'd hate to have two fairly different modes of behaviour. It's always been the suggested "twice the amount of RAM", although there's historically been the "Linux doesn't really need that much" that we just killed with 2.4.x.

If you have 512MB of RAM, you can probably afford another 40GB or so of harddisk. They are disgustingly cheap these days.

Zlatko Calusic worried that more data in swap would degrade performance because the disk head would need more seek time to find data. He asked if Linus was sure this would be okay, and Linus replied, "I'm not _sure_, obviously. However, one thing I _am_ sure of is that the sticky page-cache simplifies some things enormously, and make some things possible that simply weren't possible before." . But in a nearby post he admitted, "the sticky allocation _might_ make the IO we do be more spread out." He felt it was important to consider these kinds of potential downsides, though he felt that in this case the benefits outweighed the drawbacks; and at one point Eric W. Biederman explained succinctly, "The tradeoff when implemented correctly is that writes will tend to be more spread out and reads should be better clustered together."

Zlatko ran some tests, and could not find any problems with the 2.4.0 memory management logic, though he added, "I have found that new kernel allocates 4 times more swap space under some circumstances. That may or may not be alarming, it remains to be seen." At one point, Linus gave his overall take on 2.2/2.4 performance issues. He said:

I personally think 2.4.x is going to be as fast or faster at just about anything. We do have some MM issues still to hash out, and tuning to do, but I'm absolutely convinced that 2.4.x is going to be a _lot_ easier to tune than 2.2.x ever was. The "scan the page tables without doing any IO" thing just makes the 2.4.x memory management several orders of magnitude more flexible than 2.2.x ever was.

(This is why I worked so hard at getting the PageDirty semantics right in the last two months or so - and why I released 2.4.0 when I did. Getting PageDirty right was the big step to make all of the VM stuff possible in the first place. Even if it probably looked a bit foolhardy to change the semantics of "writepage()" quite radically just before 2.4 was released).

Elsewhere, he considered the case of swapless or low-swap machines:

If you don't have any swap, or if you run out of swap, the major difference between 2.2.x and 2.4.x is probably going to be the oom handling: I suspect that 2.4.x might be more likely to kill things off sooner (but it tries to be graceful about which processes to kill).

Not having any swap is going to be a performance issue for both 2.2.x and 2.4.x - Linux likes to push inactive dirty pages out to swap where they can lie around without bothering anybody, even if there is no _major_ memory crunch going on.

If you do have swap, but it's smaller than your available physical RAM, I suspect that the Linux-2.4 swap pre-allocate may cause that kind of performance degradation earlier than 2.2.x would have. Another way of putting this: in 2.2.x you could use a fairly small swap partition to pick up some of the slack, and in 2.4.x a really small swap-partition doesn't really buy you much anything.



在讨论中,Linus明确的说明了,在Linux2.4.x中,内存管理(MM)策略的改变。就如Windows98向Windows2000转变一样,微软在内存和交换区中保存了更多的脏页,而不是及时回收内存,大幅提高了系统的效率。(见Widnows核心编程第18章的论述)。

Linus明确的指出,即使是512M内存,也可以分配高达40G的交换区,以提高系统的性能。Zlatko 在向Linus提出性能的质疑后,自己进行了验证。实验表明大交换区策略,没有增加磁盘I/O的流量。

最后,关于本贴早先的问题,究竟分多大的分区为宜,在查阅了一些资料后,对本问题我目前的最终看法,并且我也将按照如下方法分配交换区:

1. 交换区最小不低于4G
建立两个各为2G的交换区,做为基础的4G交换分区

2. 建立8个2G的交换文件,做为扩展的交换分区
这样总的交换分区大概在20G左右,如果硬盘更大,可以增加最多。

谢谢网中人提出的一系列问题,我也可以对您的按照系统运行状况来分配交换区的提议,做出答复:按照Linus的建议,可以不必要考虑这些。Linux 2.4.x内核会在大的交换区情况下,运行的更好。

網中人 回复于:2005-07-11 13:41:06

呵.... 就是這篇!

不過, 我所提的 total usage, 是指 mem 的真實用量, 這包含了 app 與 kernel 還有其他各種用途...

若 total 只用 64M , 你真的認為 4G swap 有幫助?
若你還堅持, 那好吧, 那我沒啥話要說了!

wangrujun 回复于:2005-07-11 14:55:20

呵呵,如果是64M,4G swap也许真的有所帮助。你看Linus说512M就可以使用40G的swap,那么64M为何不可能使用4G的swap呢?这里Linus有个基本的前提,就是磁盘已经非常便宜,下雨天打孩子,闲着也是闲着呢。

也许您还可以最其它的例子,比如512K的Memory,是否需要4G的swap。那...这样的话,就扯得远了。其实我在第一贴的提问中,说明了基本的配置情况,这里有一个理性的限定范围吧。

flysgly_tracy 回复于:2005-07-11 15:35:59

看了大家的发言,懂了不少.但是说什么的都有.所以还是有点晕.
现在我的服务器是IBM x445系列,内存4G,安装的Linux企业版4,还有Weblogic8.1,分配的是4G的swap,机器运行的时候很慢,尤其是用SSH从服务器上拷贝东西下来时,简直让人受不了!
还请各位大侠支招啊!

rlneo 回复于:2005-07-11 16:40:08

超过2G以后sys_daemon进程会首选从SWAP中读取数据 速度会很慢的

wangrujun 回复于:2005-07-12 08:59:18

楼上说的这个情况,我还是第一次看到。学习中。

gridpc 回复于:2005-07-12 10:49:25

引用:原帖由 "wangrujun" 发表:
我在debian 和 fedora的文档中,都看到有说明,swap分区最好不要超过2G。

我想请问题一下,为何单个swap分区不要超过2G?如果超过2G会有什么问题?
另外,这个限制是只对ide硬盘而言,还是普遍的要求,即对scsi?.........


xuexi

網中人 回复于:2005-07-12 12:59:47

引用:原帖由 "wangrujun" 发表:
呵呵,如果是64M,4G swap也许真的有所帮助。你看Linus说512M就可以使用40G的swap,那么64M为何不可能使用4G的swap呢?这里Linus有个基本的前提,就是磁盘已经非常便宜,下雨天打孩子,闲着也是闲着呢。

也许您还..........


嗯? 看起來是文字的誤會?

我說 toal "用" 64M, 不是說 total "有" 64M .
不知, 這用跟有的差別, 能否讓兄明白?

flysgly_tracy 回复于:2005-07-12 13:46:39

那么我是否可以改成两个2G的swap呢?这样会不会提高服务器的运行速度呢?

wangrujun 回复于:2005-07-12 17:20:05

引用:原帖由 "網中人" 发表:

嗯? 看起來是文字的誤會?

我說 toal "用" 64M, 不是說 total "有" 64M .
不知, 這用跟有的差別, 能否讓兄明白?


老兄客气了。是我的疏忽,明白您的意思了。

如果swap总共只用64M,当然可以不用4G。Linus在文章中的本意,并且我也在前文中说明过,因为磁盘费用低廉,64M与4G在费用上没有什么区别,所以这时宁可使用更多的磁盘。

如果server的硬盘只有10G,当然要节省空间了。

wangrujun 回复于:2005-07-12 17:24:37

引用:原帖由 "flysgly_tracy"]那么我是否可以改成两个2G的swap呢?这样会不会提高服务器的运行速度呢?
发表:


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

如果是一块物理磁盘,那么是否这样做就无所谓。

redhat在其文档中声称,每块swap大小不可超过2G。但是ibm在其针对linux 2.4 kernel的文档中表明,2.4.10及以后的linux kernel,支持的每块swap最大不超过24GB。

我宁可相信ibm的文档。原因redhat文档中,多处有过时的错误描述,实在让人为之汗颜。

wangrujun 回复于:2005-07-12 17:26:54

引用:原帖由 "rlneo"]超过2G以后sys_daemon进程会首选从SWAP中读取数据 速度会很慢的
发表:


请教您这样说的原因何在?我在哪里可以求证?是否可以贴一段代码,或者指示一个方向?

谢谢。

7758 回复于:2005-07-18 14:50:36

引用:原帖由 "wangrujun" 发表:

请教您这样说的原因何在?我在哪里可以求证?是否可以贴一段代码,或者指示一个方向?

谢谢。


的确,这个我也是第一次听说,忘给个文档说明下

linsu 回复于:2005-08-05 10:43:31

:arrow: 交换分区一般是内存的两倍就可以,不过要是要运行orcale的话,并且物理内存不是很大的话,建议交换分区1G

火鸡 回复于:2005-08-05 17:02:35

引用:原帖由 "wangrujun"]如果我有需求,需要8G的交换文件呢?
发表:


那就多做几个SWAP。

luckandy_zhu 回复于:2005-08-15 17:10:22

我没有机会接触到上面讨论的问题,但我也一直奇怪,为什么linux需要swap分区,为什么大家都认为是内存的2倍,我在自己的机器上装过,因为是自己的pc,一开始按照2倍分的swap分区,后来硬盘空间太紧,就做的和内存一样大,甚至有一段时间没有swap分区,运行的也挺正常的,为什么我要把我宝贵的硬盘空间分出来给可有可无的swap分区,为了出现错误时把内存内容还有其他信息写到里面么?是为了提高系统效率么,那为什么不增加内存呢?为什么系统不能根据我的内存大小进行管理,这不正是操作系统的职责么?

bingosek 回复于:2005-08-15 17:48:00

引用:原帖由 "luckandy_zhu"]我没有机会接触到上面讨论的问题,但我也一直奇怪,为什么linux需要swap分区,为什么大家都认为是内存的2倍,我在自己的机器上装过,因为是自己的pc,一开始按照2倍分的swap分区,后来硬盘空间太紧,就做的和内存一?.........
发表:


swap是内存的2倍只是一个给新手使用的经验值,实际使用swap的大小是根据程序对内存使用状况需要调整的。

你机器不使用swap也能够运行是因为运行的程序对内存的需求不大

至于说swap的作用,跟windows的虚拟内存的作用是一样的,我也不多说了

夜鹰007 回复于:2006-03-19 21:51:42

强,,我想怎么会有这种的呢 ??
分两个交换分区有什么用呢??

clampox 回复于:2007-01-09 18:32:34

越看越迷糊了……

chexyo 回复于:2007-01-09 20:12:10

看完这个帖子,感觉帮助很大,
之前理解的交换分区最大2个G,一直纳闷,但是服务器需要稳定,怕因为这个原因出问题。看了那段linus先生的谈话,说没甚么问题,让我放心了不少,但是我还是坚信确实2G有一定道理。

超过2G之后,会出现意想不到的问题,我还是相信这句话的,虽然现在楼主和一些资深人士有用过8G的,但是我在配置自己服务器的时候,尽管是2.6内核64位的,还是交换分区用2G,物理内存是6G,呵呵,不是也有人说大于2G系统都装不上么。

甚么时候等服务器空闲了,我再试试用8G或者12G的swap

aleng 回复于:2007-01-24 11:25:10

swap设置多少合适

车里焖 2007/1/24

经常会有人问:我的内存大小是xxx,那么我建立的swap多少才合适?
常有人回答:大概物理内存的1倍即可。------这纯属胡说八道。

swap 建立多少,要看任务需要多少物理内存满足不了的空间,即物理内存+swap 〉= 系统中所有任务最大的内存需求总和 即可

这个问题就变成了 我不知道所有任务最大内存需求是多少,那怎么办?

可以1步1步来:
1 用swapoff 关掉所有swap 然后正常运行任务,如果出现内存不足的提示,就需要逐步增加swap
2 一般来讲,物理内存达到256m,在安装时即可不用划分交换分区.
3 可以在安装后建立交换分区,或者建立交换文件.

32位系统最多管理4G内存,其中1G内核,3G所有程序共用.
在我的64位工作站系统中,有32G物理内存,amd双路cpu,我划分了200G的swap.(不好意思,相当于数据库运算,不吃cpu,专吃内存)

对于linux,要安装64位,大内存版本内核.即可支持这种cpu内存.我用的是 as4-u4-x86-64-large-smp 内核

st690714 回复于:2007-01-31 15:01:31

看来swap大小的划分,也能考验水平啊.

網中人 回复于:2007-03-14 15:42:41

剛才發現 redhat 雜誌有篇關於 virtual memory 的文章,很不錯,推薦給大家參考: http://www.redhat.com/magazine/001nov04/features/vm/
cy_xiaoxiao 回复于:2007-12-04 20:02:20

Thirty-two-bit systems do not support swap files larger than 2GB. If you need more than 2GB of swap space, create multiple swap partitions

qboat 回复于:2008-04-12 03:32:36

到底分多少合适,这要看你平时都跑些什么程序,它们要占用多少内存。如果你的物理内存已经够用了,那么完全不分配虚拟内存都可以。事实上,系统安装之后也可以再增加虚拟内存(通过文件模拟,而不是重新分区)。

至于为什么 SWAP 分区不宜过大,这是由于 Linux 内存分配的特点——它会尽可能多地使用内存(包括SWAP分区)。尽量使用内存的目的是加快 IO 处理的速度,比如关掉一个程序,原先占有的内存空间并不立即清空,下一次打开时就不用去硬盘找数据,而直接从内存中读取。但是如果虚拟内存过大,那么保留在内存缓冲区中的数据实际上还是在硬盘中,那对于加快速度就没有多大的作用了。

SWAP分区对于物理内存小的机器是必不可少的,假设物理内存只有64M,而某个程序启动最少要256M,如果没有足够的虚拟内存,这个程序是根本打不开的(系统会报内存不足错误,甚至崩溃)。对于程序而言,物理内存和虚拟内存是没有任何区别的,它们只关心空间是否够大。在物理内存够用的情况下可以适当分配一些空间给 SWAP,这仅仅是为了偶尔同时开很多大家伙时,防止出现内存不足错误。

asia_ji 回复于:2008-04-12 12:12:31

引用:原帖由 qboat 于 2008-4-12 03:32 发表


到底分多少合适,这要看你平时都跑些什么程序,它们要占用多少内存。如果你的物理内存已经够用了,那么完全不分配虚拟内存都可以。事实上,系统安装之后也可以再增加虚拟内存(通过文件模拟,而不是重新分区)。 ...


正解!!

[url=http://linux.chinaunix.net/bbs/viewpro.php?uid=40865]asia_ji
回复于:2008-04-12 12:14:29

引用:原帖由 qboat 于 2008-4-12 03:32 发表

至于为什么 SWAP 分区不宜过大,这是由于 Linux 内存分配的特点——它会尽可能多地使用内存(包括SWAP分区)。尽量使用内存的目的是加快 IO 处理的速度,比如关掉一个程序,原先占有的内存空间并不立即清空,下一次打开时就不用去硬盘找数据,而直接从内存中读取。但是如果虚拟内存过大,那么保留在内存缓冲区中的数据实际上还是在硬盘中,那对于加快速度就没有多大的作用了。 ...


个人认为:swap分区不宜过大,够用即可!

[url=http://linux.chinaunix.net/bbs/viewpro.php?uid=512587]luren04
回复于:2008-04-12 21:40:28

引用:原帖由 双眼皮的猪 于 2005-5-17 15:26 发表


我觉得SWAP到2G已经没有必要了.干脆就加内存算了,这么折腾它...


同意。:emn32: :em39: :em39: :em39: :em39:

[url=http://linux.chinaunix.net/bbs/viewpro.php?uid=690508]gigilogin
回复于:2008-04-13 16:32:07

现在内存这么大还用得着swap吗

luren04 回复于:2008-04-15 23:31:36

fedora的文档中提到,swap分区最好不要超过2G。

cssweb234 回复于:2008-08-04 17:44:50

看了这么多,也了解了不少东西。虽然还有点晕


原文链接:http://linux.chinaunix.net/bbs/viewthread.php?tid=546338
转载请注明作者名及原文出处

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: