关于Linux系统的swap交换空间

用Ubuntu已经将近1年了,最近重装了16.04之后,每天到下午5点左右,都会发现Swap交换空间有几百兆的写入,系统内存8G,硬盘是SSD,i5处理器,配置中档,也没有启动什么大型软件,就是用IDEA做开发,虽然没有影响,但本着一颗求知的心,google一下,第一篇是《All about Linux swap space》,口气很大,直接翻译了。

Linux将随机存储RAM称为内存页。交换技术就是将一页内存复制到预先设定的硬盘上的交换空间,来释放该页占用内存。物理内存和交换空间的和就是可提供的虚拟内存的总量。

有两个原因证明交换技术是很重要的。首先,系统需要的内存量比物理内存更大时,系统内核可以把较少使用的内存页写到交换空间,把空闲出来的内存给当前的应用程序(进程)使用。其次,一个应用启动时使用的内存页,可能只是在初始化时使用,之后不会再用,操作系统就可以把这部分内存页写入交换空间,把空闲出来的内存给其他应用使用或作为磁盘高速缓存。

但是,交换技术也有负面作用。相对于内存,硬盘读写速度慢。内存的读写速度可以使用纳秒衡量,但是硬盘的速度只能达到毫秒级,访问硬盘的速度比访问内存的速度慢成千上万倍。发生的交换越多,系统运行越慢。有时候会有过度的交换或内存页频繁的写入写出的抖动发生,因为系统既要保证应用正常运行,又要寻找空闲的内存。这种情况下,只能通过增加RAM来解决。

Linux有两种形式的交换空间:交换分区和交换文件。交换分区就是一个独立的硬盘,没有文件或内容。交换文件是文件系统中的一个特殊文件,独立于系统和数据文件之外。

可以使用swapon -s命令查看swap空间,输出如下:

Filename  Type       Size       Used Priority
/dev/sda5 partition  859436  0       -1

每一行列出的都是系统正在使用的交换空间。这里的’Type’字段表明该交换空间是一个分区而不是文件,通过’Filename’可以知道交换分区是磁盘sda5。’Size’字段磁盘大小,单位是KB,’Used’字段是表示有多少交换空间被使用。’Priority’字段表示Linux系统的交换空间使用优先级。有一个重要的特性,如果在Linux系统中挂载两个(或更多)具有相同优先级的交换空间(最好是两个不同的设备),Linux将交替使用,可以提升交换性能。

交换分区

要为系统添加一个额外的交换分区,首先你需要准备一个。第一步是确保分区标记为交换分区,第二步是将格式设置为swap文件系统。将分区标记为swap分区,以root权限运行:

fdisk -l /dev/hdb

将’/dev/hdb’替换为你的交换分区的磁盘。输出类似于:

Device Boot    Start      End           Blocks  Id      System
/dev/hdb1       2328    2434    859446  82      Linux swap / Solaris

如果分区没有标记为swap分区,你需要使用命令fdisk及参数t来声明。操作分区时要小心,你绝对不想删除重要的分区或把系统分区的标识改错。交换分区上的数据会丢失,所以每次改动都需要多次确认。还需要注意的是,Solaris使用相同的ID作为Linux交换空间,所以需要小心不要杀掉Solaris分区。

如果分区已经标记为swap分区,就需要通过root权限运行mkswap命令:

mkswap /dev/hdb1

如果运行没有错误,你的交换空间就开始使用。立即激活:

swapon /dev/hdb1

可以通过swapon -s来确认是否运行。为了在系统启动时自动挂载swap空间,需要在’/etc/fstab’文件中添加一些列的配置,swap空间是特殊的文件系统,许多参数不可用。比如:

/dev/hdb1       none    swap    sw      0       0

检查你的交换空间是无需重新启动,你可以运行swapoff -a命令,然后运行swapon -a,在通过swapon -s检查。

交换文件

和交换分区类似,Linux也支持使用交换文件,你可以创建、准备,以交换分区的方式挂载。交换文件的好处是,你不需要找一个空的分区或添加额外的交换分区磁盘。

使用dd命令创建一个空文件。创建一个1G的文件,比如:

dd if=/dev/zero of=/swapfile bs=1024 count=1048576

‘/swapfile’是交换文件的名字,’count’的1048576是文件大小,单位KB。

准备交换文件使用mkswap命令,类似于准备分区,不过这次是使用同一个交换文件:

mkswap /swapfile

同样的,挂载交换文件使用swapon命令:

swapon /swapfile

在’/etc/fstab’中输入下面的内容:

/swapfile       none    swap    sw      0       0

交换空间的大小

如果你有很大的内存,有可能没有交换空间,系统也能运行良好。但是如果物理内存耗光,系统就会崩溃,因为它没有其他缓解方式,所以最好还是提供一个交换空间,更何况磁盘比内存便宜很多。

关键的问题是内存空间多大?老版的类UNIX操作系统要求交换空间是物理内存的两到三倍。现在的扩展版(比如Linux)不需要这么多,但是如果你配置这些,他们也会使用。重要的原则如下:

  1. 对于桌面系统,使用系统内存的两倍的交换空间,将可以运行大量的应用程序(其中可能有很多闲置的),使更多的RAM用于主要的应用;
  2. 对于服务器,使用小量的交换空间(通常是物理内存的一半),这样你就可以通过监控交换空间的大小来预警是否需要增加RAM;
  3. 对于老式台式机,使用尽可能大的交换空间

Linux 2.6内核中增加一个新的内核参数’swappiness’,管理员可以通过该参数修改Linux交换方式。参数值从0到100.从本质上说,值越大,将引起越多内存页发生交换;值越小,就有越多的应用驻留在内存中,而交换空间是空闲的。内核维护者Andrew Morton说过,他在他的台式机中设置swappiness值是100,说:“我的观点是,通过内核参数降低交换是错误的。你不需要几百兆的无用应用占用内存。把它放在磁盘上,把内存留给有用的东西。”

Morton的想法有一个漏洞,如果内存交换太快,应用响应就会下降,因为当应用窗口被点击时,应用正在从交换空间读入内存,就会感觉运行很慢。

默认的’swappiness’值是60。你可以使用root命令调整参数(作用到重启):

echo 50 > /proc/sys/vm/swappiness

如果你需要使参数永久有效,就需要修改’/etc/sysctl.conf’中的’vm.swappiness’参数。

结论

管理交换空间是系统管理的一个重要方面。有了良好的规划和合理的使用交换技术可以有很多好处。不要害怕实验,并且经常监控你的系统,以确保你得到你需要的结果。


写在最后

就目前来说,内存和SSD都开始降价,基本上很轻松就能把机器攒到8G(RAM)+120G(SSD),这样的话,就个人用户的桌面系统而言,交换空间的作用被大大削弱,但是正如上面说的,如果没有交换空间,内存耗光的时候,机器就挂了。因为SSD不建议分多个分区,所以使用swap file的方式比较好,而且还可以多建几个swap file文件,提升交换性能。

原文链接:All about Linux swap space

翻译:沉潜飞动

译文链接:关于Linux系统的swap交换空间

时间: 2024-10-30 14:38:15

关于Linux系统的swap交换空间的相关文章

linux swap交换空间

linux内存通过 virtual memory 虚拟内存来管理整个内存, physical RAM物理内存和swap交换空间即为virtual memory总量. swap的使用场景 swap主要有两个用处 1.当系统需要比物理内存更多的内存空间的时候,内核会把内存里边用得比较少的内存页面swap out到交换分区,以空出物理内存给当前应用来快速运行. 2.某些应用启动的时候初始化但是随后的应用运行期间不再使用的内存页面,系统会把这部分页面也swap out到交换空间,以留出物理内存页面给其他

linux系统添加swap虚拟内存与删除配置方法

兄弟连Linux培训教程 linux系统添加swap虚拟内存与删除配置(www.lampbrother.net) 1.swap概述 Swap分区,即交换区,Swap空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中.这样,系统总是在物理内存不够时,才进行Swap交换. 其实

添加swap交换空间

添加swap交换空间(宗良版): dd if=/dev/zero of=/data/swaps bs=1024 count=8192000 mkswap /data/swaps swapon /data/swaps 类似:https://blog.csdn.net/zstack_org/article/details/53258588 原文地址:https://www.cnblogs.com/hfdp/p/12356238.html

centos中设置swap交换空间的大小设置和swappiness的比例设置

首先使用free -m命令查看内存使用情况和swap的大小 关闭swap: 设置swap的大小: bs指的是Block Size,就是每一块的大小.这里的例子是1M,意思就是count的数字,是以1M为单位的. count是告诉程序,新的swapfile要多少个block.这里是1024,就是说,新的swap文件是5G大小. 注意:可能需要点时间完成此步,耐心等待完成. 把增大后的文件变为swap文件: 重新打开swap:  让swap在启动的时候,自动生效.打开/etc/fstab文件,加上以

设置/修改linux上的swap交换分区的方法

设置centos上的swap交换分区的方法 作为linux世界里最稳定的服务器版本,rhas5一直有很大的应用面,之前一直关注的是freebsd,因为应用的需要,特别在配合mysql和oracle上red hat有着太多优势. 用centos来代替red hat as的使用,因为centos5是利用rhas5的源码,去掉redhat的商标.图标之后编译发行的,是最一个源码编译版本,我用的是centos 5.2 在安装centos 5.2的时候,忘设置swap交换分区,在内存小的情况下,增大swa

linux系统修改Swap分区【转】

在装完Linux系统之后自己去修改Swap分区的大小(两种方法) 在安装完Linux系统后,swap分区太小怎么办,怎么可以扩大Swap分区呢?有两个办法,一个是从新建立swap分区,一个是增加swap分区.下面介绍这两种方法:第一您必须有root权限,过程中一定要很小心,一不小心就破坏了整个硬盘的数据,执行下面的过程之前您需要三思而行,错误操作后的后果由执行者自己承担.新建swap分区 1.以root身份进入控制台,输入 # swapoff -a          #停止交换分区 2. 用fd

linux系统增加swap容量的方法

在安装linux系统时,初始设置的swap空间实际使用中不够用,需要增加swap空间: 下面所有的操作需要root用户权限: 增加swap容量步骤: 1.建立一个分区,使用dd命令 dd if=/dev/zero of=/home/swap bs=1024 count=10240000 会创建 /home/swap 一个分区文件.文件大小是10240000个block,bs为1个block的大小为1k,这里创建10G大小的swap: # ll /home/swap -rw-r--r-- 1 ro

linux命令:swap交换分区、free查看内存使用情况、mkswap创建交换分区

    mkswap命令简介: 用于创建格式化交换分区swap. 1.命令格式:    free  查看系统内存使用情况        -m:以M为单位显示(默认以字节显示) [[email protected] ~]# free total       used       free     shared    buffers     cached Mem:       1938628     161284    1777344          0      26632      57404

释放Linux系统预留的硬盘空间【转】

http://www.cnblogs.com/ggjucheng/archive/2012/10/07/2714294.html 前言 大多数文件系统都会保留一部分空间留作紧急情况时用(比如硬盘空间满了),这样能保证有些关键应用(比如数据库)在硬盘满的时候有点余地,不致于马上就 crash,给监控系统和管理员一点时间去察觉.不过有时候这部分预留的硬盘空间不用的话有点浪费.如何释放这部分系统预留的空间呢? 在 Linux ext2/ext3/ext4 文件系统上通常默认预留5%的硬盘空间,如果硬盘