Linux Swap交换分区设置

朱登凯 2011-09-02

关于swap交换分区的设置:

一种流行的、以讹传讹的说法是,安装Linux系统时,交换分区swap的大小应该是内存的两倍。也就是说,如果内存是2G,那么就应该分出4G的硬盘空间作为交换空间。其实这是严重的浪费。真实的情况是:可以根据你系统内存的大小,以及所使用的程序,自行决定交换分区的大小,甚至可以完全不用交换分区!

首先解释一下什么是交换分区。交换分区,英文的说法是swap,意思是“交换”、“实物交易”。它的功能就是在内存不够的情况下,操作系统先把内存中暂时不用的数据,存到硬盘的交换空间,腾出内存来让别的程序运行,和Windows的虚拟内存(pagefile.sys)的作用是一样的。

做一个假设:如果你的内存足够大,极少出现内存不足的情况,那么你就不需要交换分区。事实上,这种可能性是完全存在的。现在的1G内存的电脑不算什么了。动辄4G内存的电脑也日益普遍。日常使用的话,很少能用完全部的内存。在用不完内存容量的情况下,还要划出它两倍的硬盘空间用于内存交换,这不是浪费吗?

可以说,在你内存基本够用的情况下,完全可以不要交换空间。在Windows下也是一样,在系统属性中,把虚拟内存设置为0,系统依然运行的很好。当然,如果你用的是服务器,还是要有专门的虚拟内存,有备无患。但是虚拟内存的大小不一定非要内存的两倍。

那么怎么知道你的系统有没有用到交换空间呢?只需要在root用户下,运行下面的命令就可以知道了。

free-m

在日常应用中,通过上述命令看到交换空间的使用情况为0,那么你就不需要很大的虚拟内存,甚至可以完全不需要另辟硬盘空间作为虚拟内存。那么,万一有一天你需要了呢,难道要重装系统?大可不必,在Linux下虚拟内存不单可以放在单独的交换分区,也可以是一个在正常分区下的交换文件。

---------------------------------------------------------------------

1查看swap空间大小(总计):

#free-m默认单

位为k,-m单位为M

totalusedfreesharedbufferscached

Mem:377180197019110

-/+buffers/cache:50327

Swap:5720572

2查看swap空间(file(s)/partition(s)):

包括文件和分区的详细信息

#swapon-s

等价于

#cat/proc/swaps

3添加交换空间

两种选择:添加一个交换分区或添加一个交换文件。推荐你添加一个交换分区;不过,若你没有多少空闲空间可用,则添加交换文件。

3.1添加一个交换分区

步骤如下:

a使用fdisk来创建交换分区(假设/dev/sdb2是创建的交换分区)

b使用mkswap命令来设置交换分区:

#mkswap/dev/sdb2

c启用交换分区:

#swapon/dev/sdb2

d写入/etc/fstab,以便在引导时启用:

/dev/sdb2swapswapdefaults00

3.2添加一个交换文件

a创建大小为512M的交换文件:

#ddif=/dev/zeroof=/swapfile1bs=1024kcount=512

b使用mkswap命令来设置交换文件:

#mkswap/swapfile1

c启用交换分区:

#swapon/swapfile1

d写入/etc/fstab,以便在引导时启用:

/swapfile1swapswapdefaults00

新添了交换分区并启用它之后,请查看cat/proc/swaps或free命令的输出来确保交换分区已被启用了。

4删除交换空间:

a禁用交换分区:

#swapoff/dev/sdb2

b从/etc/fstab中删除项目;

c使用fdisk或yast工具删除分区。

删除交换文件步骤同上。

--------------------------------------------------------------------------------

#free-m

totalusedfreesharedbufferscached

Mem:377180197019110

-/+buffers/cache:50327

Swap:5720572

Mem行显示了从系统角度看来内存使用的情况,total是系统可用的内存大小,数量上等于系统物理内存减去内核保留的内存.

buffers和cached是系统用做缓冲的内存.buffers与某个块设备关联,包含了文件系统元数据,并且跟踪了块的变化.cache只包含了文件本身.

-/+buffers/cache行则从用户角度显示内存信息,可用内存从数量上等于mem行used列值减去buffers和cached内存的大小.

因为buffers和cached是操作系统为加快系统运行而设置的,当用户需要时,可以只接为用户使用.

top显示系统运行时的各进程动态、实时的状态(cpu、内存)

top中有3个列VIRTRESSHR,标示了进程使用的内存情况.

VIRT标识这个进程可以使用的内存总大小,包括这个进程真实使用的内存,映射过的文件,和别的进程共享的内存等.

RES标识这个这个进程真实占用内存的大小.

SHR标识可以和别的进程共享的内存和库大小.

vmstat显示内存的使用情况

这些命令都是从/proc/meminfo中读取内存信息.

关于/proc/meminfo中各行的含意,在内核源代码的Documentation/filesystems/proc.txt文件中有叙述

系统的真实内存大小可以用dmesg|grep[mM][eE][mM]看到

/proc/pid/status显示一个进程的详细状态

#cat/proc/5346/status

Name:bash

State:S(sleeping)

SleepAVG:98%

Tgid:5346

Pid:5346

PPid:5343

TracerPid:0

Uid:1000100010001000

Gid:104104104104

FDSize:256

Groups:624294410411310001001

VmPeak:6528kB

VmSize:6528kB

VmLck:0kB

VmHWM:1976kB

VmRSS:1976kB

VmData:752kB

VmStk:84kB

VmExe:644kB

VmLib:1788kB

VmPTE:16kB

Threads:1

SigQ:0/4294967295

SigPnd:0000000000000000

ShdPnd:0000000000000000

SigBlk:0000000000000000

SigIgn:0000000000384004

SigCgt:000000004b813efb

CapInh:0000000000000000

CapPrm:0000000000000000

CapEff:0000000000000000

VmSize即为该进程内存总大小,和top输出中的VIRT一致.

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/onlymilan/archive/2009/12/04/4941189.aspx

相关推荐