精华内容
下载资源
问答
  • linux swap分区作用

    千次阅读 2017-07-28 18:54:40
    http://blog.csdn.net/taoyanqi8932/article/details/52955235



    http://blog.csdn.net/taoyanqi8932/article/details/52955235

    展开全文
  • 主要介绍了详细解读linuxswap分区作用,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
  • Linux swap分区作用详解

    千次阅读 2020-04-21 19:53:44
    1、关于虚拟内存和物理内存 ...用作虚拟内存的磁盘空间被称为交换空间(又称 swap 空间)。 注意:Linux 的内存管理采取的是分页存取机制,为了保证物理内存能得到充分的利用,内核会在适当的时候将物理内存中不经常...

    1、关于虚拟内存和物理内存

    物理内存:即硬件提供的实际内存空间
    虚拟内存:相对于物理内存,在 Linux 下还有一个虚拟内存的概念,虚拟内存是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存。用作虚拟内存的磁盘空间被称为交换空间(又称 swap 空间)。
    注意:Linux 的内存管理采取的是分页存取机制,为了保证物理内存能得到充分的利用,内核会在适当的时候将物理内存中不经常使用的数据块自动交换到虚拟内存中,而将经常使用的信息保留到物理内存。

    2、合理规划虚拟内存

    交换空间的页面在使用时会首先被交换到物理内存,如果此时没有足够的物理内存来容纳这些页面,它们又会被马上交换出去,如此一来,虚拟内存中可能没有足够的空间来存储这些交换页面,最终会导致 Linux 出现假死机、服务异常等问题。Linux 虽然可以在一段时间内自行恢复,但是恢复后的系统己经基本不可用了。因此,合理规划和设计 Linux 内存的使用是非常重要的,关于物理内存和交换空间的大小设置问题,取决于实际所用的硬盘大小,但大致遵循这样一个基本原则:

    • 如果内存较小(根据经验,物理内存小于 4GB),一般设置 swap 分区大小为内存的 2 倍;
    • 如果物理内存大于 4GB,而小于16GB,可以设置 swap 分区大小等于物理内存;
    • 如果内存大小在 16GB 以上,可以设置 swap 为0,但并不建议这么做,因为设置一定大小的 swap 分区是有一定作用的。

    3、建立swap分区

    3.1 建立swap分区第一步:分区

    [root@localhost ~]# fdisk /dev/sdb
    #以/dev/sdb分区为例
    WARNING: DOS-compatible mode is deprecated.It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u').
    Command (m for help): n
    #新建
    Command action e extended p primary partition (1-4)
    P
    #主分区
    Partition number (1-4): 1
    #分区编号
    First cylinder (1-2610, default 1):
    #起始柱面
    Using default value 1
    Last cylinder, +cylinders or +size{K, M, G} (1-2610, default 2610): +500M
    #大小
    Command (m for help): p
    #查看一下
    Disk /dev/sdb: 21.5GB, 21474836480 bytes
    255 heads, 63 sectors/track, 2610 cylinders
    Units = cylinders of 16065 *512 = 8225280 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes 1512 bytes
    Disk identifier: OxOOOOOebd
    Device Boot Start End Blocks Id System
    /dev/sdb1 1 65 522081 83 Linux
    #刚分配的分区ID是83,是Linux分区,我们在这里要分配swap分区
    Command (m for help): t
    #修改分区的系统ID
    Selected partition 1
    #只有一个分区,所以不用选择分区了
    Hex code (type L to list codes): 82
    #改为swap分区的ID
    Changed system type of partition 1 to 82 (Linux swap / Solaris)
    Command (m for help): p
    #再查看一下
    Disk /dev/sdb: 21.5 GB, 21474836480 bytes
    255 heads, 63 sectors/track, 2610 cylinders
    Units = cylinders of 16065 *512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes 1512 bytes Disk identifier: OxOOOOOebd
    Device Boot Start End Blocks Id System
    /dev/sdb1 1 65 522081 82 Linux swap / Solaris
    #修改过来了
    Command (m for help): w
    #记得保存退出
    The partition table has been altered!
    Calling ioctl() to re-read partition table.
    Syncing disks.
    

    3.2 建立 swap 分区第二步:格式化

    因为要格式化成 swap 分区,所以格式化命令是 mkswap。命令如下:

    [root@localhost ~]# mkswap /dev/sdb1
    Setting up swapspace version 1, size = 522076 KiB
    no label, UUID=c3351 dc3-f403-419a-9666-c24615e170fb
    

    3.3 使用swap分区

    在使用 swap 分区之前,我们先来说说 free 命令。命令如下:

    [root@localhost ~]#free
    total used free shared buffers cached
    Mem: 1030796 130792 900004 0 15292 55420
    -/+ buffers/cache: 60080 970716
    Swap: 2047992 0 2047992
    

    free 命令主要是用来查看内存和 swap 分区的使用情况的,其中:

    • total:是指总数;
    • used:是指已经使用的;
    • free:是指空闲的;
    • shared:是指共享的;
    • buffers:是指缓冲内存数;
    • cached:是指缓存内存数,单位是KB;

    注意:cached 是给读取数据时加速的,buffers 是给写入数据加速的。cached 是指把读取出来的数据保存在内存中,当再次读取时,不用读取硬盘而直接从内存中读取,加速了数据的读取过程;buffers 是指在写入数据时,先把分散的写入操作保存到内存中,当达到一定程度后再集中写入硬盘,减少了磁盘碎片和硬盘的反复寻道,加速了数据的写入过程。可以看到,在加载进新的 swap 分区之前,swap 分区的大小是 2000MB,接下来只要加入 swap 分区就可以了,使用命令 swapon。命令格式如下:

    [root@localhost ~]# swapon 分区设备文件名
    

    执行命令:

    [root@localhost ~]# swapon /dev/sdb1
    swap分区已加入,我们查看一下。
    [root@localhost ~]#free
    total used free shared buffers cached
    Mem: 1030796 131264 899532 0 15520 55500
    -/+ buffers/cache: 60244 970552
    Swap: 2570064 0 2570064
    

    swap 分区的大小变成了 2500MB,加载成功了。如果要取消新加入的 swap 分区,则也很简单,命令如下:

    [root@localhost ~]# swapoff /dev/sdb1
    

    如果想让 swap 分区开机之后自动挂载,就需要修改 /etc/fstab 文件,命令如下:

    [root@localhost ~]#vi /etc/fstab
    UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2 / ext4 defaults 1 1
    UUID=0b23d315-33a7-48a4-bd37-9248e5c443451 boot ext4 defaults 1 2
    UUID=4021be19-2751-4dd2-98cc-383368c39edb swap swap defaults 0 0
    tmpfs /dev/shm
    tmpfs defaults 0 0
    devpts /dev/pts
    devpts gid=5, mode=620 0 0
    sysfs /sys
    sysfs defaults 0 0
    proc /proc
    proc defaults 0 0
    /dev/sdb1 swap swap
    defaults 0 0
    #加入新swap分区的相关内容,这里直接使用分区的设备文件名,也可以使用UUID。
    
    展开全文
  • linuxswap分区作用

    万次阅读 2016-10-28 12:38:50
    嵌入式Linux中文站消息,Linux系统的Swap分区,即交换区,Swap空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自...

    嵌入式Linux中文站消息,Linux系统的Swap分区,即交换区,Swap空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。其实,Swap的调整对Linux服务器,特别是Web服务器的性能至关重要。通过调整Swap,有时可以越过系统性能瓶颈,节省系统升级费用。
    如大家所知,现代操作系统都实现了“虚拟内存”这一技术,不但在功能上突破了物理内存的限制,使程序可以操纵大于实际物理内存的空间,更重要的是,“虚拟内存”是隔离每个进程的安全保护网,使每个进程都不受其它程序的干扰。
    可能计算机用户会经常遇这种现象。例如,在使用Windows系统时,可以同时运行多个程序,当你切换到一个很长时间没有理会的程序时,会听到硬盘“哗哗”直响。这是因为这个程序的内存被那些频繁运行的程序给“偷走”了,放到了Swap区中。因此,一旦此程序被放置到前端,它就会从Swap区取回自己的数据,将其放进内存,然后接着运行。
    另外,并不是所有从物理内存中交换出来的数据都会被放到Swap中(如果这样的话,Swap就会不堪重负),有相当一部分数据被直接交换到文件系统。例如,有的程序会打开一些文件,对文件进行读写(其实每个程序都至少要打开一个文件,那就是运行程序本身),当需要将这些程序的内存空间交换出去时,就没有必要将文件部分的数据放到Swap空间中了,而可以直接将其放到文件里去。如果是读文件操作,那么内存数据被直接释放,不需要交换出来,因为下次需要时,可直接从文件系统恢复;如果是写文件,只需要将变化的数据保存到文件中,以便恢复。但是那些用malloc和new函数生成的对象的数据则不同,它们需要Swap空间,因为它们在文件系统中没有相应的“储备”文件,因此被称作“匿名”(Anonymous)内存数据。这类数据还包括堆栈中的一些状态和变量数据等。所以说,Swap空间是“匿名”数据的交换空间。
    突破128M Swap限制
    有些Linux(国内汉化版)安装手册上有这样的说明:Swap空间不能超过128M。为什么会有这种说法?在说明“128M”这个数字的来历之前,先给问题一个回答:现在根本不存在128M的限制!现在的限制是2G!
    Linux系统中的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。
    这样来实现Swap空间的管理,是要防止Swap空间中有坏块。如果系统检查到Swap中有坏块,则在相应的位映射上标记上0,表示此页不可用。这样在使用Swap时,不至于用到坏块,而使系统产生错误。
    现在的系统设计者认为:
    1.现在硬盘质量很好,坏块很少。
    2.就算有,也不多,只需要将坏块罗列出来,而不需要为每一页建立映射。
    3.如果有很多坏块,就不应该将此硬盘作为Swap空间使用。
    于是,现在的Linux取消了位映射的方法,也就取消了128M的限制。直接用地址访问,限制为2G。
    Swap配置对性能的影响
    对于分配太多的Swap空间,会浪费磁盘空间,而Swap空间太少,则系统会发生错误。
    当系统的物理内存用光了,系统就会跑得很慢,但仍能运行;如果Swap空间用光了,那么系统就会发生错误。例如,Web服务器能根据不同的请求数量衍生出多个服务进程(或线程),如果Swap空间用完,则服务进程无法启动,通常会出现“application is out of memory”的错误,严重时会造成服务进程的死锁。因此Swap空间的分配是很重要的。
    一般情况下,Swap空间应大于或等于物理内存的大小,最小不应小于64M,通常Swap空间的大小应是物理内存的2-2.5倍。但根据不同的应用,应有不同的配置:如果是小的桌面系统,则只需要较小的Swap空间,而大的服务器系统则视情况不同需要不同大小的Swap空间。特别是数据库服务器和Web服务器,随着访问量的增加,对Swap空间的要求也会增加,具体配置参见各服务器产品的说明。
    此外,Swap分区的数量对性能也有很大的影响。因为Swap交换的操作是磁盘IO的操作,如果有多个Swap交换区,Swap空间的分配会以轮流的方式操作于所有的Swap,这样会大大均衡IO的负载,加快Swap交换的速度。如果只有一个交换区,所有的交换操作会使交换区变得很忙,使系统大多数时间处于等待状态,效率很低。用性能监视工具就会发现,此时的CPU并不很忙,而系统却慢。这说明,瓶颈在IO上,依靠提高CPU的速度是解决不了问题的。
    系统性能监视
    Swap空间的分配固然很重要,而系统运行时的性能监控却更加有价值。通过性能监视工具,可以检查系统的各项性能指标,找到系统性能的瓶颈。本文只介绍一下在Solaris下和Swap相关的一些命令和用途。
    最常用的是Vmstat命令(在大多数Unix平台下都有这样一些命令),此命令可以查看大多数性能指标。 例如:

    vmstat 3

    procs memory swap io system cpu
    r b w swpd free buff cache si so bi bo in cs us sy id
    0 0 0 0 93880 3304 19372 0 0 10 2 131 10 0 0 99
    0 0 0 0 93880 3304 19372 0 0 0 0 109 8 0 0 100
    0 0 0 0 93880 3304 19372 0 0 0 0 112 6 0 0 100
    …………
    命令说明:
    vmstat 后面的参数指定了性能指标捕获的时间间隔。3表示每三秒钟捕获一次。第一行数据不用看,没有价值,它仅反映开机以来的平均性能。从第二行开始,反映每三秒钟之内的系统性能指标。这些性能指标中和Swap有关的包括以下几项:
    procs下的w
    它表示当前(三秒钟之内)需要释放内存、交换出去的进程数量。
    memory下的swpd
    它表示使用的Swap空间的大小。
    Swap下的si,so
    si表示当前(三秒钟之内)每秒交换回内存(Swap in)的总量,单位为kbytes;so表示当前(三秒钟之内)每秒交换出内存(Swap out)的总量,单位为kbytes。
    以上的指标数量越大,表示系统越忙。这些指标所表现的系统繁忙程度,与系统具体的配置有关。系统管理员应该在平时系统正常运行时,记下这些指标的数值,在系统发生问题的时候,再进行比较,就会很快发现问题,并制定本系统正常运行的标准指标值,以供性能监控使用。
    另外,使用Swapon-s也能简单地查看当前Swap资源的使用情况。例如:

    swapon -s

    Filename Type Size Used Priority
    /dev/hda9 partition 361420 0 3
    能够方便地看出Swap空间的已用和未用资源的大小。
    应该使Swap负载保持在30%以下,这样才能保证系统的良好性能。
    增加Swap空间,分以下几步:
    1)成为超级用户
    $su - root
    2)创建Swap文件

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

    创建一个有连续空间的交换文件。
    3)激活Swap文件

    /usr/sbin/swapon swapfile

    swapfile指的是上一步创建的交换文件。
    4)现在新加的Swap文件已经起作用了,但系统重新启动以后,并不会记住前几步的操作。因此要在/etc/fstab文件中记录文件的名字,和Swap类型,如:
    /path/swapfile none Swap sw,pri=3 0 0
    5)检验Swap文件是否加上
    /usr/sbin/swapon -s

    删除多余的Swap空间。
    1)成为超级用户
    2)使用Swapoff命令收回Swap空间。

    #/usr/sbin/swapoff swapfile

    3)编辑/etc/fstab文件,去掉此Swap文件的实体。
    4)从文件系统中回收此文件。

    #rm swapfile

    5)当然,如果此Swap空间不是一个文件,而是一个分区,则需创建一个新的文件系统,再挂接到原来的文件系统上。

    转载:http://www.embeddedlinux.org.cn/html/xinshourumen/201211/25-2401.html

    展开全文
  • Linux swap分区

    万次阅读 多人点赞 2019-08-11 21:26:35
    什么是swap?...简单点说,当系统物理内存吃紧时,Linux会将内存中不常访问的数据保存到swap上,这样系统就有更多的物理内存为各个进程服务,而当系统需要访问swap上存储的内容时,再将swap上的数据加载到...

    转自:https://segmentfault.com/a/1190000008125116

    什么是swap?

    swap space是磁盘上的一块区域,可以是一个分区,也可以是一个文件,或者是他们的组合。简单点说,当系统物理内存吃紧时,Linux会将内存中不常访问的数据保存到swap上,这样系统就有更多的物理内存为各个进程服务,而当系统需要访问swap上存储的内容时,再将swap上的数据加载到内存中,这就是我们常说的swap out和swap in。

    为什么需要swap?

    要回答这个问题,就需要回答swap给我们带来了哪些好处。

    • 对于一些大型的应用程序(如LibreOffice、video editor等),在启动的过程中会使用大量的内存,但这些内存很多时候只是在启动的时候用一下,后面的运行过程中很少再用到这些内存。有了swap后,系统就可以将这部分不这么使用的内存数据保存到swap上去,从而释放出更多的物理内存供系统使用。

    • 很多发行版(如ubuntu)的休眠功能依赖于swap分区,当系统休眠的时候,会将内存中的数据保存到swap分区上,等下次系统启动的时候,再将数据加载到内存中,这样可以加快系统的启动速度,所以如果要使用休眠的功能,必须要配置swap分区,并且大小一定要大于等于物理内存

    • 在某些情况下,物理内存有限,但又想运行耗内存的程序怎么办?这时可以通过配置足够的swap空间来达到目标,虽然慢一点,但至少可以运行。

    • 虽然大部分情况下,物理内存都是够用的,但是总有一些意想不到的状况,比如某个进程需要的内存超过了预期,或者有进程存在内存泄漏等,当内存不够的时候,就会触发内核的OOM killer,根据OOM killer的配置,某些进程会被kill掉或者系统直接重启(默认情况是优先kill耗内存最多的那个进程),不过有了swap后,可以拿swap当内存用,虽然速度慢了点,但至少给了我们一个去debug、kill进程或者保存当前工作进度的机会。

    • 如果看过Linux内存管理,就会知道系统会尽可能多的将空闲内存用于cache,以加快系统的I/O速度,所以如果能将不怎么常用的内存数据移动到swap上,就会有更多的物理内存用于cache,从而提高系统整体性能。

    swap的缺点?

    上面介绍了swap的优点,那swap的缺点呢?swap是存放在磁盘上的,磁盘的速度和内存比较起来慢了好几个数量级,如果不停的读写swap,那么对系统的性能肯定有影响,尤其是当系统内存很吃紧的时候,读写swap空间发生的频率会很高,导致系统运行很慢,像死了一样,这个时候添加物理内存是唯一的解决办法。

    由于系统会自动将不常用的内存数据移到swap上,对桌面程序来说,有可能会导致最小化一个程序后,再打开时小卡一下,因为需要将swap上的数据重新加载到内存中来。

    到底要不要swap?

    上面介绍了什么是swap以及它们的优缺点,那么到底要不要配置swap呢?答案是:看情况。

    下面分别讨论内存不够用、内存勉强够用和内存很充裕这三种情况下服务器和桌面环境对swap的选择。

    内存不够用

    不管是桌面还是服务器,当物理内存明显不够用,而又想跑程序的话,添加swap是唯一的选择,慢点总比不能工作强。

    内存勉强够用

    建议配置swap,这样内核会将不常用的数据从内存移到swap上,从而有更多的物理内存供系统调用,提升系统性能,同时也避免因偶尔的物理内存不够造成进程异常退出,提升系统稳定性,但对服务器来说,一定要限制或者监控swap空间的使用情况,当出现swap空间使用超预期或者swap in/out频繁时,要及时采取措施,不然对性能影响很大

    内存充裕

    理论上来说,如果物理内存足够多并且不需要休眠功能,那swap就没什么用,可关键问题是我们很难保证物理内存在任何情况下都够用,因为总有意想不到的情况发生,比如某些进程耗内存超预期,服务器压力超预期,内存泄漏等。

    在内存充裕的这种情况下,如果发生异常,swap能帮到我们吗?

    桌面环境

    一般不会开什么监控功能,所以也没法提前预知内存使用异常,当内存被用光的时候,分两种情况:

    • 配置了swap:在系统变慢的时候能感觉到,可能还有机会杀掉一些进程和保存当前工作进度,当然也会出现慢的想砸电脑的情况,不过在磁盘如此廉价的情况下,浪费点磁盘空间换取这样的一个机会还是值得的。

    • 没有配置swap:内核的OOM killer被触发,可能连保存工作进度的机会都没有。

    服务器环境

    服务器一般都会配置监控程序,当内存用量达到一个阈值的时候告警或者会自动重启异常的进程。但如果没有监控呢?当内存被用光的时候,分两种情况:

    • 配置了swap:这时服务器还能提供服务,但性能会降低好几个档次,直到最终处于几乎死机状态,并且这一过程将持续很长一段时间,对服务器来说是个灾难;所以配置swap只能让服务再苟延残喘一会儿,然后就是长时间的服务中断(比如原来是每秒处理1000个请求的服务器,由于频繁使用swap,导致现在每秒只能处理50个请求,站在系统角度,进程还在运行,但是在业务角度服务已经几乎中断了)。

    • 没配置swap:这时内核的OOM killer被触发,在默认配置下,耗内存的进程会被优先kill掉,这种进程一般就是我们的业务进程,这时守护进程就会自动重启该业务进程(没有守护进程?开什么玩笑),这种情况只会造成服务中断一会会儿(取决于进程重启的时间),不会出现上面因配置了swap而导致性能很差且服务持续中断的情况。就算OOM killer没有kill掉预期的进程,我们通过测试也能发现,然后将OOM killer配置成重启系统,那也比配置了swap在那里苟延残喘的好。

    从上面可以看出,对服务器来说,似乎不配置swap更好,可以让有问题的进程尽快重启,缩短业务受影响的时间

    并且,就算没有配置监控程序,我们还有cgroups中的内存控制模块,可以控制一组进程所能使用的最大内存数,当超过这个数的时候,可以触发相应的行为,比如重启进程等。

    总的来说,对于桌面环境来说,一般内存没有服务器端那么充裕,并且由于使用场景原因,会打开很多不同类型的GUI窗口,但前台的进程只有一个,大部分都是在后台待命,所以配置swap对提升性能还是有必要的;对于服务器来说,配置的内存都比较充裕,启动起来的进程也都是要干活的进程(不然就不应该被启动起来),并且也没有休眠的需求,再加上有了cgroups之后,可以更轻松的限制进程的内存使用,个人认为配置swap基本没什么必要了,看看coreos,默认就没有swap。

    swap大小配置多少比较合适?

    既然配置swap对桌面系统有帮助,那么配置多少大小的swap比较合适呢?下面是ubuntu给出的建议:

    • 当物理内存小于1G且不需要休眠时,设置和内存同样大小的swap空间即可;当需要休眠时,建议配置两倍物理内存的大小,但最大值不要超过两倍内存大小

    • 当物理内存大于1G且不需要休眠时,建议大小为round(sqrt(RAM)),其中RAM为物理内存大小;当需要休眠时,建议大小是RAM+round(sqrt(RAM)),但最大值不要超过两倍内存大小

    • 如果两倍物理内存大小的swap空间还不够用,建议增加内存而不是增加swap

    下面是详细的不同物理内存情况下的建议,第一列是物理内存的大小,第二列和第三列是不需要和需要休眠两种情况下推荐的大小,第四列是不要超过的最大值

     物理内存(MB)  不需要休眠  需要休眠  最大值
     256          256       512     512
     512          512       1024    1024
     1024         1024      2048    2048
    
    物理内存(GB)  不需要休眠  需要休眠  最大值
      1          1         2        2
      2          1         3        4
      3          2         5        6
      4          2         6        8
      5          2         7        10
      6          2         8        12
      8          3         11       16
      12         3         15       24
      16         4         20       32
      24         5         29       48
      32         6         38       64
      64         8         72       128
      128        11       139       256

    怎么配置swap?

    当我们确定好配置多大的swap空间后,具体应该怎么配置呢?当然可以在系统安装的时候分配好,但如果对安装时分配的大小不满意,我们还可以在后面进行调整。在这里将不介绍安装的时候怎么配,只介绍如何往系统中添加更多的swap空间。

    Linux下有两种类型的swap空间,swap分区和swap文件,他们有各自的特点:

    • swap分区上面由于没有文件系统,所以相当于内核直接访问连续的磁盘空间,效率相对要高点,但由于swap分区一般安装系统时就分配好了了,后期要缩减空间和扩容都很不方便。

    • swap文件放在指定分区的文件系统里面,所以有可能受文件系统性能的影响,但据说2.6版本以后的内核可以直接访问swap文件对应的物理磁盘地址,相当于跳过了文件系统直接访问磁盘,不过如果swap文件在磁盘上的物理位置不连续时,还是会对性能产生不利影响,但其优点就是灵活,随时可以增加和移除swap文件。

    查看系统中已经配置的swap

    dxt@DXT:~/QiuZhao/SharedMem/ShareMem$ free -m
                  total        used        free      shared  buff/cache   available
    Mem:           3845        2986         120         411         737         143
    Swap:          3904        1540        2364
    

    或者: 

    使用命令swapon -s即可查看系统中在用的swap

    dev@dev:~$ swapon -s
    Filename                Type        Size    Used    Priority
    /dev/dm-1               partition   524284  0       -1

    如果配置有多个swap分区或者文件的话,这里将会有多行,每行代表一个正在被系统使用的swap分区或文件,下面是每个字段的意思:

    • Filename:如果swap类型是分区,这里将是分区的路径,如果swap类型是文件,这里将是文件的路径

    • Type:swap的类型,partition代表这是一个swap分区,file代表这是一个swap文件

    • Size:swap的大小,单位是k,这里524284表示的差不多是512M

    • Used:已经被使用的大小,这里0表示还没有被使用到

    • Priority:优先级,优先级高的swap将会被优先使用,同等优先级的swap将会被均匀的使用(round-robin算法),优先级可以通过“swapon -p”命令来设置

    查看系统中swap in/out的情况

    并不是swap空间占用多就一定性能下降,真正影响性能是swap in和out的频率,频率越高,对系统的性能影响越大,我们可以通过vmstat命令来查看swap in/out的频率

    #参数2表示每两秒统计一次,si和so两列就是每秒swap in和out的次数
    dev@ubuntu:~$ vmstat 2
    procs------------memory--------------swap----io-----system-----------cpu-----
     r b    swpd  free  buff cache      si so   bi bo   in  cs      us sy id wa st
     0 0    70232 75620 7940 209476     0  0    0  0    111 180     0  1  99 0  0
     0 0    70232 75620 7940 209476     0  0    0  0    116 186     1  1  99 0  0
     0 0    70228 75620 7940 209476     2  0    2  0    120 193     1  1  98 1  0
     0 0    70228 75620 7940 209476     0  0    0  0    117 186     0  0  100 0 0
     0 0    70228 75620 7940 209476     0  0    0  0    113 184     0  1  99 0  0

    添加swap分区

    在添加swap分区前,首先得有一个空闲的分区,如果是一块新的磁盘,可以用fdisk来创建一个新的分区用于swap。

    注意:磁盘分区操作一定要小心,弄不好就会造成数据丢失、系统挂掉的后果。磁盘分区操作不是本篇要介绍的内容,所以这里不会讨论fdisk怎么用。

    #本篇使用的测试环境是虚拟机,/dev/sdb是一块新加的硬盘并且已经用fdisk创建好了一个分区
    #本例中将使用/dev/sdb1这个分区
    dev@dev:~$ sudo fdisk -l /dev/sdb
    Device     Boot Start     End Sectors Size Id Type
    /dev/sdb1        2048 4194303 4192256   2G 83 Linux
    
    #创建swap分区
    dev@dev:~$ sudo mkswap /dev/sdb1
    Setting up swapspace version 1, size = 2 GiB (2146430976 bytes)
    no label, UUID=d69621de-618a-4bea-9a96-b8e8b0d0ea40
    
    #查看系统中现在正在使用的swap,以便于和添加后做比较
    dev@dev:~$ swapon -s
    Filename                Type        Size    Used    Priority
    /dev/dm-1                               partition   524284  0   -1
    
    #将新的分区加入到系统中
    dev@dev:~$ sudo swapon /dev/sdb1
    
    #这时候可以看到新的swap分区已经被加入到系统中了,并且优先级比原来的要低
    dev@dev:~$ swapon -s
    Filename                Type        Size    Used    Priority
    /dev/dm-1               partition   524284  0       -1
    /dev/sdb1               partition   2096124 0       -2
    
    #为了保证系统重启后会自动加载我们新的swap分区,需要修改/etc/fstab文件
    dev@dev:~$ sudo sh -c 'echo "/dev/sdb1 none  swap    sw   0    0" >> /etc/fstab'
    #查看一下,确保写入成功,这里的第一条是原来的系统的swap分区,第二条是我们刚添加的
    dev@dev:~$ grep swap /etc/fstab
    /dev/mapper/dev--vg-swap_1 none            swap    sw              0       0
    /dev/sdb1 none  swap    sw   0    0

    添加swap文件

    添加swap文件就简单多了,也没有分区操作那么有风险。

    #先创建一个新的512M的文件,用来作为swap文件,文件路径可以随便
    #fallocate这个命令依赖于文件系统,有些老的文件系统不支持这个命令,比如ext2,
    #这种情况下可以用dd来实现同样的效果:
    #sudo dd if=/dev/zero of=/mnt/512MiB.swap bs=1024 count=524288
    #fallocate和dd的区别在于:
    #fallocate是先声明这么多,然后在具体用到的时候文件系统才分配真正的物理磁盘空间,就是用一点分配一点,
    #而dd是一开始就实实在在的写了512m的数据到物理磁盘空间。
    #所以作为测试来说fallocate方便些,因为刚开始不用写任何数据,要快
    dev@dev:~$ sudo fallocate -l 512m /mnt/512MiB.swap
    
    #修改文件的权限,避免其他用户对这个文件进行误操作
    dev@dev:~$ sudo chmod 600 /mnt/512MiB.swap
    
    #格式化为swap文件
    dev@dev:~$ sudo mkswap /mnt/512MiB.swap
    
    #将新的文件加入到系统中
    dev@dev:~$ sudo swapon /mnt/512MiB.swap
    
    #这时候可以看到新的swap文件已经被加入到系统中了,类型为file
    #这里可以看到由于优先级最高,第一个swap分区/dev/dm-1已经被使用了24K
    dev@dev:~$ swapon -s
    Filename                Type        Size    Used    Priority
    /dev/dm-1               partition   524284  24      -1
    /dev/sdb1               partition   2096124 0       -2
    /mnt/512MiB.swap        file        524284  0       -3
    
    #从free命令的输出可以看到,经过前面两轮添加swap分区和文件,
    #现在系统的交换空间已经变成3G(3144692K)了
    dev@dev:~$ free
                  total        used        free      shared  buff/cache   available
    Mem:         500192       39112        9564        1996      451516      430820
    Swap:       3144692          24     3144668
    
    #同样为了保证系统重启后会自动加载我们新的swap文件,需要修改/etc/fstab文件
    dev@dev:~$ sudo sh -c 'echo "/mnt/512MiB.swap none  swap    sw   0    0" >> /etc/fstab'
    

    注意:不是所有的文件系统都支持创建swap文件,如btrfs,在btrfs分区里创建swap文件将失败。

    取消所有的swap

    如果经过深思熟虑之后,确定不再需要swap,那么可以将所有的swap分区和文件从系统中移除,步骤和上面的刚好相反

    #停掉所有系统正在使用的swap
    dev@dev:~$ sudo swapoff -a
    
    #swapon -s命令没有任何输出,free命令显示swap空间为0,说明swapoff成功
    dev@dev:~$ swapon -s
    dev@dev:~$ free
                  total        used        free      shared  buff/cache   available
    Mem:         500192       35924      348888        2004      115380      433924
    Swap:             0           0           0
    
    #当然我们还需要修改/etc/fstab,否则下次重启后,系统又会重新挂载相应的swap分区和文件
    #使用自己喜欢的编辑器,将/etc/fstab中跟swap相关的三行删掉即可(本例中是三行,请根据实际情况调整)

    如何优化swap性能?

    怎么配置swap可以让它的性能更好呢?

    • 尽量使用swap分区,相对于swap文件来说,分区肯定是连续的物理磁盘空间,而swap文件有可能不是

    • 将swap分区和系统所在的分区放在不同的磁盘上,这样就不会和系统盘抢同一个磁盘的I/O带宽

    • 如果有多块磁盘的话,可以在每个盘上创建一个swap分区,并且将它们的优先级设置的一样,这样内核就会平均的访问这些swap分区,性能相当于原来的N倍(这里N是磁盘的数量)

    不过话又说回来了,如果频繁的访问swap的话,怎么优化swap都没用,跟内存比还是低几个数量级,性能还是下降的厉害,如果不频繁访问swap的话,优化swap又有啥意义呢?所以其实优化swap性能的实际意义不大,这里了解一下就好。

    配置swappiness

    有时我们桌面环境确实配置了比较充裕的内存,并且也配置了swap空间,这个时候就希望尽量减少swap空间的使用,避免对系统性能造成影响,Linux早就帮我们考虑到这种情况了,在2.6内核中,增加了一个叫做swappiness的参数,用于配置需要将内存中不常用的数据移到swap中去的紧迫程度。这个参数的取值范围是0~100,0告诉内核尽可能的不要将内存数据移到swap中,也即只有在迫不得已的情况下才这么做,而100告诉内核只要有可能,尽量的将内存中不常访问的数据移到swap中。

    Ubuntu的desktop和server的默认配置都是60(可能会随着版本变化),对于桌面环境来说,界面的响应速度直接关系到系统的流畅程度,如果内存比较充裕的话,可以将这个值设置的小一点,这样就尽可能的把数据留在内存中,从而唤醒后台界面程序会更快一些,Ubuntu desktop建议将该值设置为10,当然大家可以根据swap空间的实际使用情况,任意调整这个参数,直到自己满意的水平为止。对于服务器来说,主要性能衡量标准是整体的处理能力,而不是具体某一次的响应速度,能把更多的内存用来做I/O cache可能效果更好,所以Ubuntu server建议保持60的默认值。

    • 查看当前系统中swappiness的值

    dev@dev:~$ cat /proc/sys/vm/swappiness
    60
    • 修改当前系统中swappiness的值

    dev@dev:~$ sudo sysctl vm.swappiness=10
    vm.swappiness = 10
    dev@dev:~$ cat /proc/sys/vm/swappiness
    10

    上面通过sysctl修改的swappiness值在系统重启后会失效,要想重启后继续生效,需要修改配置文件/etc/sysctl.conf,将下面这行修改成10,如果文件中找不到这行的话,在文件末位加上这行就可以了

    vm.swappiness=10
    展开全文
  • linux 扩展SWAP分区

    2012-05-26 23:34:33
    linux扩展linux swap分区和根目录空间不足
  • 文章目录一.swap分区1.swap作用2.swap分区大小建议3.swap管理二.磁盘配额1.磁盘配额作用2.磁盘配额设定方法 一.swap分区 1.swap作用 程序在运行时所有数据是在RAM。当RAM使用量超过了限额,为了使系统更加稳定,我们...
  • 建立一个普通的Linux分区(主分区、逻辑分区均可) fdisk /dev/sdb Command (m for help): p Disk /dev/sdb: 8589 MB, 8589934592 bytes 255 heads, 63 sectors/track, 1044 cylinders, total 16777216 sectors ...
  • Linux 扩展swap分区

    2019-12-04 23:49:58
    在按照oracle 12c时,提示swap分区不足,研究了下swap分区的扩展 1、查看当前swap大小 看到当前swap分区是2g free -m 2、增加交换分区文件 本例设置增加3G的交换分区, count 等于想要的块大小 dd if=/dev/zero of...
  • linux调整swap分区

    千次阅读 2018-08-06 14:43:49
    free -m #查看当前swap分区大小 创建swapfile dd if=/dev/zero of=/swap_file bs=1M count=2000 #复制2G磁盘空间(说明:bs:大块区域大小,count,块的总数) 将swapfile设置为swap空间 mkswap /swap_file #格式...
  • swap 分区Linux系统的交换分区,当内存不够用的时候,我们使用 swap 分区存放内存中暂时不用的数据。也就是说,当内存不够用时,我们使用 swap 分区来临时顶替。 建议 swap 分区的大小是内存的两倍,但不超过 2GB...
  • Linux SWAP交换分区应该设置多大?

    万次阅读 多人点赞 2019-02-21 15:21:02
    Linux SWAP交换分区,就是我们课本说讲过的虚拟内存的概念。 当Linux系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有...
  • 我们都知道在安装Linux系统时在分区时可以分配swap分区,而系统安装后(在运行中)如何建立或调整swap分区呢?下面这篇文章主要给大家介绍了关于Linux系统中swap分区的设置与增加/删除的相关资料,需要的朋友可以...
  • Linux开启Swap分区

    千次阅读 2018-12-27 17:00:03
    创建要作为swap分区的文件:增加1GB大小的交换分区,则命令写法如下,其中的count等于想要的块的数量(bs*count=文件大小)。 # dd if=/dev/zero of=/root/swapfile bs=1M count=1024 格式化为交换分区文件: # ...
  • /etc/sysctl.conf 文件vm.swappiness 参数设置
  • 查看linux swap分区使用情况

    千次阅读 2017-10-09 16:51:02
    #!/bin/bash ... - Swap used: $SUM - ($PROGNAME )" let   OVERALL=$OVERALL+$SUM SUM=0 done echo   "Overall swap used: $OVERALL" } getswap
  • linux关闭和开启swap分区

    千次阅读 2020-08-21 15:35:23
    linux关闭和开启swap分区 查看已开启的swap分区 lmz@X280-1:~$ swapon NAME TYPE SIZE USED PRIO /dev/dm-1 partition 976M 253M -2 关闭swap分区 lmz@X280-1:~$ free -h 总计 已用 空闲 共享 缓冲/缓存 可用 ...
  • SWAP就是LINUX下的虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间(也就是SWAP分区)虚拟成内存来使用.它和Windows系统的交换文件作用类似,但是它是一段连续的磁盘空间,并且对用户不可见。 查看swap分区...
  • Linux交换分区 swap分区

    千次阅读 2019-07-15 15:53:50
    SWAP就是LINUX下的虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间(也就是SWAP分区)虚拟成内存来使用.它和Windows系统的交换文件作用类似,但是它是一段连续的磁盘空间,并且对用户不可见。 需要注意的...
  • 创建swap分区 创建swap分区两种方法,一种挂载磁盘,一种创建文件的形式 第一种:先划分一个磁盘,比如:/dev/vdb 格式化:mkswap /dev/vdb 启用:swapon /dev/vdb 在/etc/fstab文件中添加 /dev/vdb swap swap ...
  • Linux之分配 swap 分区详解

    千次阅读 热门讨论 2020-04-22 10:42:15
    文件系统管理-4.1分配swap分区 写在前面:自己写完检查可能会有所纰漏,读者们如若发现哪里有错误,可在下方留言或私信我,我会第一时间改正 写在后面:希望这些讲解对你有所帮助,希望大家多多点赞和关注,你们...
  • Linux分配swap分区

    千次阅读 2016-01-24 13:14:10
    free 【选项】:查看内存与swap分区使用状况 选项:   -h:使用习惯单位显示容量,如KB, MB或GB等。   -m:以MB为单位显示容量。  -k:以KB为单位显示容量。 cached(缓存):是指把读取出来...
  • Linux 修改 Swap 分区大小

    千次阅读 2018-06-11 15:50:05
    用fdisk命令加swap分区的盘符,(例:# fdisk /dev/sdb)剔除swap分区,输入d删除swap分区,然后再n添加分区(添加时硬盘必须要有可用空间,然后再用t将新添的分区id改为82(linux swap类型),最后用w将操作实际...
  • Linux如何调整SWAP分区大小?

    千次阅读 2019-10-12 11:03:48
    本文为你介绍CentOS7.6如何调整SWAP分区。 #####更多资讯请关注微信公众号 ”技术训练营“ #####技术交流Q群45069036 一、增加swap分区 1.查看swap分区大小 free -m 也可以使用下面命令来查看swap分区的...
  • Linux-swap分区创建与挂载

    万次阅读 2018-04-02 09:06:21
    交换分区 当物理内存不够,就把当做虚拟内存来使用。 查看交换分区大小 [kiosk@foundation0 ~]$ free -m total used free shared buff/cache available Mem: 3946 1994 695

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 77,660
精华内容 31,064
关键字:

linuxswap分区作用

linux 订阅