Linux 交换空间管理和技巧

UNIX 如何使用交换空间

所有 UNIX 操作系统都支持某种虚拟内存 (VM) 系统。使用 VM 系统,您有两个主要区域来存储有关活动应用程序及其使用的数据的信息——物理随机访问存储器 (RAM) 和硬盘驱动器上分配的空间。

在具有 VM 的计算机中,可加载到内存中的应用程序和数据量可以大于物理 RAM,因为没有活动地使用的应用程序和信息被交换 到了磁盘上(交换空间 这个术语由此得名)。

VM 系统的优点在于,物理 RAM 得到了更有效的利用——这是因为它仅包含正在执行的应用程序和正在使用的数据。由于 RAM 比硬盘空间快,您从活动地加载的应用程序中获得了所需的性能,同时还得益于能够运行比通常所支持的更多的应用程序。

其结果是您获得了大得多的可寻址内存空间(在 32 为系统上为 4GB,在 64 位系统上则更大),从而使得应用程序开发更加容易,同时仍然提供高性能。 

设置交换空间值

您在计算机上配置的交换空间量主要取决于应用程序和操作系统。如果交换空间太小,则可能无法运行您希望运行的所有应用程序,而如果交换空间太大,则可能在浪费那些从未使用的磁盘空间。您可能还会间接地使得系统过载,因为与太小的交换空间相比,太大的交换空间会导致糟糕的性能,这是由于与系统执行实际处理所花的时间相比,它在换入和换出页面上所花的时间更多。

不同的 UNIX 变体以不同的方式使用它们的交换空间。有些变体仅在已经使用完物理内存时才使用交换空间。其他变体则对所有非活动的应用程序和未使用的页面使用交换空间。有些变体保留所有应用程序中的数据副本——同时包括内存和交换空间中的应用程序。缺省情况下,有些变体避免使用交换空间,并尽可能提供某种机制来允许您调整交换空间的使用方式。许多变体使用这些不同安排的组合来充分利用它们的交换空间。

例如在 Linux® 中,当您使用 2.6 内核时,可以通过设置 /etc/sysctl.conf 中的 vm.swappiness 值来调整系统的 swappiness。较高的值导致交换更多页面,较低的值导致将更多应用程序保留在内存中(即使这些应用程序处于空闲状态)。

除了这些基础之外,还有许多关于应该如何配置 VM 和应该分配多少磁盘空间的观点和规则。下面总结了其中一些方法:
    * 有些管理员认为,您的交换空间决不应该少于物理 RAM。由于其中的 VM 使用方式,这是较旧的 UNIX 版本(尤其是 SunOS)的一个要求。从理论上讲,拥有比物理 RAM 更多的 VM 可以使操作系统能够在系统变得空闲时将所有当前进程换出到磁盘上,并且能够提高系统的性能,因为可以将新进程直接加载到 RAM 中,而不必预先交换应用程序。
    * 对于开发系统,许多管理员都赞成应该有与 RAM 一样多的 VM。采用这种方法的原因在于,交换空间还在系统故障期间用作转储活动内存的位置;然后可以在启动期间重新加载所存储的内存转储,并将其保存为内核核心文件。如果所配置的交换空间小于物理 RAM,此类转储就无法实现。
    * 在高性能部署环境中,由于您只希望将应用程序活动地保留在内存中,并且不需要大量的交换,您可以配置尽可能小的 VM。崩溃恢复不是必需的,而确定物理 RAM 的潜在缺乏(由于交换空间用尽)的能力可以提供警告,使您知道应用程序环境未得到优化或者您需要升级 RAM。
    * 对于桌面环境,拥有非常大的 VM 分配可能对您有利,因为它使您能够运行大量的应用程序(其中许多应用程序可能是空闲的,可以容易地交换,从而使更多 RAM 对活动应用程序可用)。

选择正确的交换空间量很大程度上取决于您所配置的平台——其预期用途和您希望如何处理可用 VM 缺乏的情况。

下面是一些保守值:
    * 在桌面系统上,至少分配与物理 RAM 一样多的交换空间。
    * 在服务器上,至少分配可用 RAM 的 50% 作为交换空间。一旦头脑中有了大体数字,您就需要配置交换空间。

配置交换空间

所有 UNIX 系统都有多种类型的交换空间。主交换空间是通常在启动时配置的交换空间,并且通常是作为操作系统安装的一部分来设置的。所有 UNIX 系统通常都有一个主交换空间分配。

交换空间的创建和配置方式随不同的系统而异。在 Linux 下,用于交换的磁盘分区是通过分区 ID 来标识的,该分区必须通过 mkswap 命令来初始化:


1

$ mkswap /dev/sda2

  在大多数传统 UNIX 环境中,您可以使用任何可用分区而无需进行任何准备工作。在 HP-UX、AIX® 和 Linux 上,您可以使用 swapon 命令来将分区添加到可用的交换空间: 


1

$ swapon /dev/sda2

  在 Solaris 上,您可以使用 swap 命令来将交换空间添加到系统:


1

$ swap -a /dev/dsk/c0t0d0s2

  请注意,以这种方式添加的交换空间在重新启动后不会保留。若要永久地将交换空间添加到系统,您必须配置启动配置文件之一来自动启用交换空间分配。

添加启动时交换空间

在大多数 UNIX 变体下,交换空间都是作为内核初始化的一部分在启动时自动添加的。大多数变体使用文件系统安装文件(/etc/fstab、/etc/vfstab 或 /etc/filesystems)中的行来指定要用作交换空间的分区。您可以从 Solaris 的 /etc/vfstab 文件中看到这样一个示例

 在 Solaris 中指定要用作交换空间的分区:


1

2

3

4

5

6

7

8

9

10

11

12

#device         device           mount            FS    fsck mount   mount

#to mount       to fsck          point            type  pass at boot options

#

fd              -                /dev/fd          fd    -    no      -

/proc           -                /proc            proc  -    no      -

/dev/dsk/c0d0s1 -                -                swap  -    no      -

/dev/dsk/c0d0s0 /dev/rdsk/c0d0s0 /                ufs   1    no      -

/dev/dsk/c0d0s7 /dev/rdsk/c0d0s7 /export/home     ufs   2    yes     -

/devices        -                /devices         devfs -    no      -

ctfs            -                /system/contract ctfs  -    no      -

objfs           -                /system/object   objfs -    no      -

swap            -                /tmp             tmpfs -    yes     -

  下面显示了 Linux 中的 /etc/fstab 文件示例


1

2

3

4

5

6

7

8

9

10

11

12

13

14

# <fs>             <mountpoint>    <type>       <opts>    

<dump/pass>

/dev/sda1          /boot           ext2         noauto,noatime 1 1

/dev/sda3          /               ext3         noatime        0 0

/dev/sda2          none            swap         sw             0 0

/dev/hda1          /var/lib/mysql  ext3         noatime        1 2

/dev/hdb1          /export/data    ext3         noatime        1 2

/dev/hde1          /export/home    ext3         noatime        1 2

/dev/hde2          /var/tmp        ext3         noatime        1 2

/dev/hde3          /usr/portage/distfiles  ext3 noatime        1 2

/dev/hde4          /tmp            ext3         noatime        1 2

 

/dev/cdroms/cdrom0 /mnt/cdrom      iso9660      noauto,ro      0 0

none               /proc           proc         defaults       0 0

  最后,您可以在 AIX 中使用 /etc/swapspaces 文件来配置交换空间分区


1

2

3

4

5

6

7

8

9

10

11

* This file is modified by the chps, mkps and rmps commands and referenced

* by the lsps and swapon commands.

 

hd6:

        dev = /dev/hd6

 

paging00:

        dev = /dev/paging00

 

paging01:

        dev = /dev/paging01

  您应该使用对应的命令或 Smitty 工具来修改该文件内容,而不要直接编辑该文件。

若要删除额外的交换空间,您可以使用对应的 swapoff 或 swap -d 命令来禁用该交换分区。然而要注意,您只能禁用当前未使用的交换分区,并且不能禁用主交换分区。 

添加临时交换容量

有时您可能会用尽已配置的交换空间分区,从而在短时间内需要更多 VM,直到您能够组织某种更永久性的解决方案。如果有某个分区可用,您可以按照上面在配置交换分区部分中的介绍来准备它。

如果没有空余的分区可用,您可以创建一个或多个文件,并将它们临时添加到可用交换池中。大多数系统甚至允许您在 NFS 安装的文件系统上使用交换文件,当您没有本地磁盘空间可用时,就可以使用这样的文件系统。

若要将文件用于交换空间,请首先创建一个适当的文件。mkfile> 命令在这里最合适,因为它提供了创建大型文件的简单方法。您可以在命令行指定文件名和文件大小:


1

mkfile 512m /export/data/swapfile

  然后可以像添加分区一样添加该文件:


1

2

3

$ swap -a /export/data/swapfile

or

$ swapon /export/data/swapfile

  以这种方式使用的交换文件通常决不是针对交换空间问题的长期解决方案。您应该尽快为交换空间配置专用分区。 

监视交换空间使用情况

交换空间及其使用情况的监视包括两个方面:当前使用情况和活动使用情况。您可以在各种 UNIX 变体中找到一批不同的工具,它们报告可用空闲内存和 VM 使用情况以及当前使用情况。

在 Solaris 下,swap 工具提供了大多数交换接口功能,包括报告使用情况和可用设备。例如,若要获得已配置的交换设备列表,如在 Solaris 下监视交换空间使用情况


1

2

3

$ swap -l

swapfile             dev  swaplo blocks   free

/dev/dsk/c0d0s1     102,1       8 1220928 1220928

  在 AIX 下,您可以使用 lsps 工具来获得同样的信息


1

2

3

4

$ lsps -a

 

Page Space  Physical Volume  Volume Group  Size   %Used Active Auto

hd6         hdisk0           rootvg        2048MB     3    yes  yes

  在 Linux 下,您可以使用 swapon 工具


1

2

3

$ swapon -s

Filename                 Type            Size    Used    Priority

/dev/sda2                partition       1004052 319744  -1

  在上述每个示例中,您都可以看到可用交换空间位置列表及其用途,并大致了解交换空间的当前使用量情况。

这些快照视图非常有用,但它们仅显示了当前使用情况。其中有关交换空间的定期或全面使用情况的信息非常少。出于性能的考虑,或者在诊断您怀疑可能与交换空间有关的问题时,您通常需要内存和分页使用情况的更加交互式的视图。 

活动 VM 监视

vmstat 命令可以提供虚拟内存使用情况的长期视图,包括提供有关交换空间与 RAM 之间正在活动地交换的内存量的信息。在命令行上,您需要指定要在报告统计信息时使用的间隔(以秒为单位)。结果输出显示了大量的信息,并且可用于做出有关 VM 配置和分配的决策。

下面显示了针对 Solaris 计算机的输出示例(间隔为五秒)


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

kthr      memory            page            disk          faults      cpu

r b w   swap  free  re  mf pi po fr de sr cd cd cd cd   in   sy   cs us sy id

0 0 0 945932 385632  9  36 13  0  1  0 100 3  0  0  0  413  172   87  0 36 63

0 0 0 944616 384068  0   8  3  0  0  0  0  0  0  0  0  654   21   51  0  1 99

0 0 0 944612 384064  0   0  0  0  0  0  0  0  0  0  0  596   21   52  0  1 99

0 0 0 944612 384064  0   0  0  0  0  0  0  0  0  0  0  694   12   48  0  1 99

0 0 0 944612 384064  0   0  0  0  0  0  0  5  0  0  0  658   11   50  0  1 99

0 0 0 944612 384064  0   0  0  0  0  0  0  0  0  0  0  576   18   52  0  1 99

0 0 0 944500 383988 115 850 1  0  0  0  0  0  0  0  0  612 1656  120  1  5 94

0 0 0 942060 382444  6  62  0  0  0  0  0  0  0  0  0  669  256  146  0  2 98

0 0 0 942048 382432  9 105  0  0  0  0  0  0  0  0  0  699  414  188  0  2 98

0 0 0 946188 388188 481 2400 10 10 10 0 0  5  0  0  0  595 12613 6082 6 18 76

0 0 0 944488 386308 769 4753 1 8  8  0  0  7  0  0  0  625 15705 6285 8 29 63

0 0 0 943128 385104 839 5194 176 9 9 0  0 14  0  0  0  579 16077 6304 8 32 60

0 0 0 937692 377628 32 209  2  0  0  0  0  2  0  0  0  654  403  131  0  2 97

0 0 0 937228 377208  0   0  0  0  0  0  0  0  0  0  0  647   38   63  0  1 99

0 0 0 937220 377200 121 980 0  0  0  0  0  0  0  0  0  623 1246  218  1  6 93

0 0 0 937348 377320 126 1044 2 1  1  0  0  3  0  0  0  667 1266  228  1  7 93

0 0 0 937428 377408 57 686  0  0  0  0  0  0  0  0  0  702  890  180  1  5 94

0 0 0 937436 377404 72 861  0  0  0  0  0 54  0  0  0  689 1113  295  1  6 93

  其中存在许多列——有些列比另一些列更重要。关键的列包括:
    * swap——显示可用的总交换空间
    * free——显示空闲的交换空间量
    * pi——换入的千字节数
    * po——换出的千字节数
    * fr——空闲的千字节数

非常低的空闲空间量和较高的换入或换出页数可能表明 VM 不足,非常高的换入和换出页数可能表明物理 RAM 不足。 

将交换空间用于临时存储

在某些 UNIX 变体下,特别是 Solaris 和 Linux,您可以使用 tmpfs 文件系统;该文件系统使用 VM 作为存储空间。当您有充足的 RAM 时,这提供了支持超快速磁盘访问的理想方法;未使用的文件将交换到磁盘上。其结果是实现了快速访问最常用文件的高效解决方案,并且它可以显著提高应用程序速度,例如软件开发,其中要在编译过程期间创建大量的临时文件。

时间: 2024-11-02 10:06:29

Linux 交换空间管理和技巧的相关文章

Linux交换空间(swap space)的那些优缺点

每次安装Linux的时候,都会要求配置交换分区,那么这个分区是干嘛的呢?不设置这个分区有什么后果?如果一定要设置,设置多大比较合适?本篇将试图回答这些问题并尽量覆盖所有swap相关的知识. 下面的所有例子都在ubuntu-server-x86_64 16.04下执行通过 什么是swap? swap space是磁盘上的一块区域,可以是一个分区,也可以是一个文件,或者是他们的组合.简单点说,当系统物理内存吃紧时,Linux会将内存中不常访问的数据保存到swap上,这样系统就有更多的物理内存为各个进

在 Linux 上如何清除内存的 Cache、Buffer 和交换空间

像任何其他的操作系统一样,GNU/Linux 已经实现的内存管理不仅有效,而且更好.但是,如果有任何进程正在蚕食你的内存,而你想要清除它的话,Linux 提供了一个刷新或清除RAM缓存方法. 如何在 Linux 中清除缓存(Cache)? 每个 Linux 系统有三种选项来清除缓存而不需要中断任何进程或服务. (LCTT 译注:Cache,译作"缓存",指 CPU 和内存之间高速缓存.Buffer,译作"缓冲区",指在写入磁盘前的存储再内存中的内容.在本文中,Buf

Oracle数据库的空间管理技巧

oracle|技巧|数据|数据库 在Oracle数据库中,DBA可以通过观测一定的表或视图来了解当前空间的使用状况,进而作出可能的调整决定. 一.表空间的自由空间 通过对表空间的自由空间的观察,可用来判断分配给某个表空间的空间是太多还是不够.请看下列的语句 SQL > select a.file_id "FileNo",a.tablespace_name "Tablespace_name", 2 a.bytes "Bytes",a.byte

在linux上使用交换文件扩展交换空间

想像一种情景,当我们的Linux系统用尽交换空间时,在这种情况下,我们想要使用swap分区扩展交换空间,但在某些情况下磁盘上已经没有可用的空闲分区了,致使我们不能把它扩大. 因此,在这种情况下,我们可以使用交换文件增加swap空间. 以下是使用交换文件在Linux上扩展swap空间的方法 让我们首先检查现有的交换空间/分区的大小,使用命令 'free -m' 或者 'swapon -s' free-output-with-swap 我的交换分区大小是2 GB,我们将把交换空间扩展1GB. 第一步

Oracle数据库的空间管理技巧_oracle

正在看的ORACLE教程是:Oracle数据库的空间管理技巧. 在Oracle数据库中,DBA可以通过观测一定的表或视图来了解当前空间的使用状况,进而作出可能的调整决定.  一.表空间的自由空间  通过对表空间的自由空间的观察,可用来判断分配给某个表空间的空间是太多还是不够.请看下列的语句  可以看出,在FileNo为12的表空间RBS中,只有0.19%的分配空间未被使用,这个比例太小了,而在SYSTEM及TEMP等表空间中,高达80%以上的空间未被利用,对于生产型数据库,这个表空间的设置有些偏

隐藏X-Space个人空间下方版权方法隐藏X-Space个人空间标题隐藏X-Space个人空间管理版权方法_php技巧

版权可以在css中设置隐藏. 由于文件被ZEND所以不能删除,也不建议删除. 1.隐藏X-Space个人空间下方版权方法 修改/css/space.css找到以下代码: /*页脚*/ #xspace-footer { text-align : center; margin: 1em 0 0 0; }         #xspace-footer p { margin: 0.3em 0; }         #xspace-copyright { font: 10px Verdana, Arial

linux内核空间和用户空间的是怎样区别的,如何交互,如何从用户空间进入内核空间

转载 - linux内核空间和用户空间的是怎样区别的,如何交互,如何从用户空间进入内核空间 作者 digoal 日期 2016-11-20 标签 Linux , 用户空间 , 内核空间 , 用户态 , 内核态 , 进程上下文 , 中断上下文 背景 原文 http://blog.csdn.net/bingqingsuimeng/article/details/7924756 原文 linux驱动程序一般工作在内核空间,但也可以工作在用户空间.下面我们将详细解析,什么是内核空间,什么是用户空间,以及

Linux的内存管理概述

在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然.这是Linux内存管理的一个优秀特性,在这方面,区别于 Windows的内存管理.主要特点是,无论物理内存有多大,Linux 都将其充份利用,将一些程序调用过的硬盘数据读入内存,利用内存读写的高速特性来提高Linux系统的数据访问性能.而Windows 是只在需要内存时,才为应用程序分配内存,并不能充分利用大容量的内存空间.换句话说,每增加一些物理内存,Linux 都将能充分利用起来,发挥了硬件投

浅谈Linux的内存管理机制

一 物理内存和虚拟内存 我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念. 物理内存就是系统硬件提供的内存大小,是真正的内存,相对于物理内存,在linux下还有一个虚拟内存的概念,虚拟内存就是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的磁盘空间被称为交换空间(Swap Space). 作为物理内存的扩展,linux会在物理内存不足时,使用交换