内存是操作系统的重要组成,程序都运行在内存中,内存的使用情况会影响到服务器的性能,当内存不够用时可能会产生程序的死锁、甚至错误,swap是解决这些问题的有效手段,本篇文章将介绍swap。

  • 什么是swap
  • linux swap,也叫作交换分区,相当于windows的虚拟内存。

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

    swap不是真正的内存,它把硬盘当做内存来使用,当真正的内存被占满不够用时,操作系统会把内存中暂时不用的数据存储到swap里。因此,当前活跃的程序依旧在内存中运行,不会调用swap。

  • 使用
  • 创建swap分区实例

    #查看内存占用,swap当前为0
    root@localhost [~] free -m
                 total       used       free     shared    buffers     cached
    Mem:           994        916         77          0        187        335
    -/+ buffers/cache:        394        600
    Swap:            0          0          0
    #通过/dev/zero创建swap分区,大小500M
    root@localhost [~] dd if=/dev/zero of=/media/swap bs=1k count=512k
    524288+0 records in
    524288+0 records out
    536870912 bytes (537 MB) copied, 8.13688 s, 66.0 MB/s
    #创建交换文件
    root@localhost [~] mkswap /media/swap
    mkswap: /media/swap: warning: do not erase bootbits sectors
            on whole disk. Use -f to force.
    Setting up swapspace version 1, size = 524284 KiB
    no label, UUID=2ad4c524-b574-49f1-8e71-5bb1468bc461
    #启动swap
    root@localhost [~] swapon /media/swap
    #再次查看内存占用,swap当前以生效
    root@localhost [~] free -m
                 total       used       free     shared    buffers     cached
    Mem:           994        919         75          0         84        506
    -/+ buffers/cache:        328        666
    Swap:          511          0        511

    此时,swap只是在当前系统中存在,为了保证之后机器重启依旧有swap,我们需要在/etc/fstab文件加入一行:
    /media/swap swap swap defaults 0 0

    若想删除此swap,只需要删除配置这行,并停止服务,删除swap文件即可。

    #停止swap
    root@localhost [~] swapoff /media/swap
    #删除swap文件,以释放磁盘空间
    root@localhost [~] rm -f /media/swap
    #再次查看内存,swap为0
    root@localhost [~] free -m
                 total       used       free     shared    buffers     cached
    Mem:           994        919         75          0         84        506
    -/+ buffers/cache:        328        666
    Swap:            0          0          0
  • 知识点
  • 1. swap占用磁盘空间,即使操作系统没有将内存写入到swap,swap依旧占用磁盘空间。
    2. linux下可以加载多个swap,指定多个swap文件。
    3. linux操作系统启动后,可以动态的申请swap,若想一直生效,需要将swap放入到程序启动配置中。

  • 建议
  • 如果我们的机器有足够的内存,那么我们的linux机器完全可以不使用swap。不过一旦我们的机器物理内存使用光了,没有swap的linux将无法做任何事情,以防万一,建议机器分配swap,毕竟现在的硬盘越来越便宜了。

    在使用中有几点建议:
    1. 对于桌面linux操作系统,swap的大小建议是内存的两倍,以确保可以运行较多程序。
    2. 对于服务器linux,拥有一个更小的swap,通常是内存的一半。同时监控机器系能,当经常使用swap时,需要考虑对服务器进行内存升级。
    3. 对于内存确实非常不够用的情况,swap可以尽可能多的使用,当然这会导致磁盘的频繁读写,让程序效率下降。
    4. 内存不够,swap的频繁读写,也会导致cpu使用率变高。在这种情况下,并不是你的程序使用cpu过高,而是你的程序频繁地使用了swap。