揭开Linux的Swap之谜

上一篇 / 下一篇  2012-10-26 09:51:15 / 个人分类:Linux

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

nj.z|?2W G1[051Testing软件测试网 f BJ,OnPc

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

uYZ-?.DAo"^ N0

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

2ULKUW0

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

*R_"U7Y8h?8z/P0

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

b G7fTTs3@x0

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

51Testing软件测试网3u-c o#Tg!U

  突破128M Swap限制

$Ys)Ap xh*hb h)L051Testing软件测试网 {gEsP,l

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

Q qZ-~LW6s?0H051Testing软件测试网aSr0OC)l6f%\

   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。51Testing软件测试网s`w \N [5q

51Testing软件测试网H)[&v/Z?M J(}

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

Sg5B*lB2W LcrXS051Testing软件测试网En)r V r

  现在的系统设计者认为:51Testing软件测试网Oz@(i [6F ZG[ e

p;\/j bx0  1、现在硬盘质量很好,坏块很少。51Testing软件测试网,r!o9}dew

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

;x7MN Y*],K0

T8j-fu(k!dP2a0  3、如果有很多坏块,就不应该将此硬盘作为Swap空间使用。51Testing软件测试网$igSa`S]@3X

S7t6I6^^j0  于是,现在的Linux取消了位映射的方法,也就取消了128M的限制。直接用地址访问,限制为2G。51Testing软件测试网Vs6}T G F'k

51Testing软件测试网4IdyP5|

  Swap配置对性能的影响

6i+oI6hu CFA051Testing软件测试网C2P'rO'qN$[

  分配太多的Swap空间会浪费磁盘空间,而Swap空间太少,则系统会发生错误。51Testing软件测试网F{SIMw~2DS

51Testing软件测试网"WmQ-Nd2Y&}R

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

;pkx5e{y051Testing软件测试网Pp G:cNg^

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

A'\dUi"YpL051Testing软件测试网&GhbV,?`Pv

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

F#kW^Og!t0

`}$F(y/[ kG0  系统性能监视

%zg4aC3b7F,I-BA0

Dy`#b Br{;T0  Swap空间的分配固然很重要,而系统运行时的性能监控却更加有价值。通过性能监视工具,可以检查系统的各项性能指标,找到系统性能的瓶颈。本文只介绍一下在Solaris下和Swap相关的一些命令和用途。51Testing软件测试网-s$V!f MQ7n x

*S2X2`v1f"^|0  最常用的是Vmstat命令(在大多数Unix平台下都有这样一些命令),此命令可以查看大多数性能指标。

f#i_*L$xh051Testing软件测试网b-[ Ts$g!J1@8z:M G

  例如:51Testing软件测试网^,_Wu9E v

51Testing软件测试网U ] R}O8W

  # vmstat 351Testing软件测试网 TO0Cs'Z i.nRV8d C
  procs memory swap io system cpu
&X.F|8Dq5D#WX3W\g0  r b w swpd free buff cache si so bi bo in cs us sy id
-H7g$h F3@0K0  0 0 0 0 93880 3304 19372 0 0 10 2 131 10 0 0 99
?j wY.`6b0s0  0 0 0 0 93880 3304 19372 0 0 0 0 109 8 0 0 10051Testing软件测试网dr9z1Q*E\8\
  0 0 0 0 93880 3304 19372 0 0 0 0 112 6 0 0 10051Testing软件测试网#R A Vn9xot
  …………

4N4M'P~J.C2UOh0

F6^eKr;b0  命令说明:

nO E@5@r0

$pU[+l^'x&N!m7b:@$A0  vmstat 后面的参数指定了性能指标捕获的时间间隔。3表示每三秒钟捕获一次。第一行数据不用看,没有价值,它仅反映开机以来的平均性能。从第二行开始,反映每三秒钟之内的系统性能指标。这些性能指标中和Swap有关的包括以下几项:51Testing软件测试网\ iQr9X kF4j.LA

51Testing软件测试网_VK.s,xY:^9Z

  procs下的w
;[2[r u1h0J.|R Dw0  它表示当前(三秒钟之内)需要释放内存、交换出去的进程数量。
51Testing软件测试网g6x(Y2`5w4N

51Testing软件测试网]n l+nH&QK

  memory下的swpd51Testing软件测试网(CA1|-DO
  它表示使用的Swap空间的大小。
51Testing软件测试网N Q-Q`!R

51Testing软件测试网bWP v?4L?5oN*`!Q

  Swap下的si,so51Testing软件测试网 FN f y'Oq2o7G

]&U'HKz)cV G7a0  si表示当前(三秒钟之内)每秒交换回内存(Swap in)的总量,单位为kbytes;so表示当前(三秒钟之内)每秒交换出内存(Swap out)的总量,单位为kbytes。

?L m)\.ZOQ051Testing软件测试网7y;k&kK0v(V1QZ-G4l e.S,K*I

  以上的指标数量越大,表示系统越忙。这些指标所表现的系统繁忙程度,与系统具体的配置有关。系统管理员应该在平时系统正常运行时,记下这些指标的数值,在系统发生问题的时候,再进行比较,就会很快发现问题,并制定本系统正常运行的标准指标值,以供性能监控使用。

~ A'a-Z.[+} F051Testing软件测试网A4ju/ckiF5X`

  另外,使用Swapon-s也能简单地查看当前Swap资源的使用情况。例如:

/e!r4N)` ]D051Testing软件测试网3N4{WNKB

  # swapon -s51Testing软件测试网E(T Nr8D wg)C
  Filename Type Size Used Priority51Testing软件测试网k5f0iv-M@
  /dev/hda9 partition 361420 0 3
51Testing软件测试网)N-A%L^2S!jFqsX Tg

[/C-J+|p.FZ0  能够方便地看出Swap空间的已用和未用资源的大小。

HFm vYn1R/s*m)o0

uV(w;sq b{0  应该使Swap负载保持在30%以下,这样才能保证系统的良好性能。51Testing软件测试网Hc#z!Dp-{

nu:JAyD!sUm0  有关Swap操作的系统命令

#zbZ4^N+FZ1x-i{0

v#e$lY.w/w yT_0  增加Swap空间,分以下几步:51Testing软件测试网y%z!LwV

Z?l'Oa#g XaP5a0  1)成为超级用户
9]Q6]Pd7vt+}?5Ot0  $su - root
51Testing软件测试网/Soj M_ A

51Testing软件测试网Z3An p n^ WK

  2)创建Swap文件
W:dbF*xL}0  # dd if=/dev/zero f=swapfile bs=1024 count=65536

/F:k,Q_"L-b051Testing软件测试网5r:s^2[jR8~1z#Cn

  创建一个有连续空间的交换文件。

{C'q0Qd"K%a-Ew7E0

G-iw|6z}(F+a0  3)激活Swap文件
6A\qoMYl0  #/usr/sbin/swapon swapfile
51Testing软件测试网CoL$JTt#O;d

O#OZ*V;D'S0  swapfile指的是上一步创建的交换文件。 4)现在新加的Swap文件已经起作用了,但系统重新启动以后,并不会记住前几步的操作。因此要在/etc/fstab文件中记录文件的名字,和Swap类型,如:

k*q0VkT1EZo1c051Testing软件测试网4jB1otf rQ-A2X+K

  /path/swapfile none Swap sw,pri=3 0 0

1o(Mj9D{,PKo,~6G"F0

!Kc4X!`5H[ntN-E0  5)检验Swap文件是否加上51Testing软件测试网J0owH%s\ Lj7?
  /usr/sbin/swapon -s

V OXR Wo.^051Testing软件测试网%t?(];i*JQAVF

  删除多余的Swap空间。
] C)Bl1N$V@ H0  1)成为超级用户

#K v#rx{ B051Testing软件测试网"i(kRD(M:hh+H9~ n*C

  2)使用Swapoff命令收回Swap空间。
O0^`0PD"^s0  #/usr/sbin/swapoff swapfile
51Testing软件测试网ij&g)BM o"IL!S

51Testing软件测试网I$e:L AN

  3)编辑/etc/fstab文件,去掉此Swap文件的实体。

%w+BHVZf2N,|,u6QE%zX051Testing软件测试网4e2Zr$brf ~;z ] f

  4)从文件系统中回收此文件。
0M e J R*oq%`r0  #rm swapfile
51Testing软件测试网T)W a?h*SDW3}

51Testing软件测试网Vhj6T&^k#w]

  5)当然,如果此Swap空间不是一个文件,而是一个分区,则需创建一个新的文件系统,再挂接到原来的文件系统上。51Testing软件测试网|v$I+\ m


TAG:

 

评分:0

我来说两句

Open Toolbar