Linux 添加 SWAP 交换内存/虚拟内存 的简单方法

SWAP简单介绍

Linux的内存分为 物理内存 和 虚拟内存,虚拟内存(SWAP)也叫交换区、交换分区等。

当运行程序,产生进程时。系统会判断当前物理内存是否还有空闲内存 以允许进程调入内存运行,如果有那么 则直接调入内存进行运行;如果没有,那么会根据优先级选择一个进程挂起,把该进程交换到SWAP中等待,然后把新的进程调入到内存中运行。

根据这种换入和换出,实现了内存的循环利用,让用户感觉不到内存的限制。从这也可以看出SWAP扮演了一个非常重要的角色,就是暂存被换出的进程。


当物理内存使用完或者达到一定比例之后,系统会自动使用SWAP做临时的内存使用。当物理内存和SWAP都被使用完那么就会出错:out of memory

对于使用多大比例物理内存之后开始使用SWAP,在系统的配置文件中可以通过调整参数进行修改。

  1. cat  /proc/sys/vm/swappiness

默认是 60 ,一般不需要更改,当数值为 0 的时候,就会尽量使用物理内存直到用完才会使用SWAP,当数值为100 的时候,就会尽量使用SWAP。


SWAP是从硬盘中虚拟出来的,所以速度由硬盘的读写速度决定,如果你的Linux服务器IO很低,硬盘是 HDD或者石头盘 钻石盘,那么效果会很差。

如果你的VPS没有SWAP,那么添加一些可能会提高性能,但不建议添加太多,否则也是浪费,而且SWAP始终是硬盘虚拟的,比不上物理内存。


准备工作

注意:只有虚拟化构架为XEN、KVM、VM-Ware的VPS可以自己添加SWAP,OpenVZ不支持添加SWAP!

root 账号

添加SWAP操作,必须是 root 用户才可以操作,所以请用 root 账号登陆服务器或者切换为 root 用户:

  1. su

输入执行后,会提示你输入 root 账号的密码,输入正确密码并回车后,没有报错那么就可以继续下面的步骤了。

检查硬盘大小

因为SWAP是在硬盘中建立一个交换区文件,所以需要磁盘中最少有 这个文件大小 的空闲空间。

输入执行这个命令,即可看到你的VPS当前磁盘大小和使用情况:

  1. df m

从下面的示例中可以看到,这个VPS大概有 15GB的硬盘大小(14621 MB),用了 1GB(1117 MB),剩下12.5GB(12763 MB)大小。

既然硬盘大小充足,那就可以继续下面步骤了。

  1. # VPS示例提示 #
  2. # 下列参数表头分别为:文件系统、总大小(单位MB)、已用大小(单位MB)、未用大小(单位MB)、使用率(%)、挂载点
  3. root@doub.io:~# df -m
  4. Filesystem 1Mblocks Used Available Use% Mounted on
  5. rootfs 14621 1117 12763 9% /
  6. udev 10 0 10 0% /dev
  7. tmpfs 50 1 50 1% /run
  8. /dev/disk/byuuid/12dc23 14621 1117 12763 9% /
  9. tmpfs 5 0 5 0% /run/lock
  10. tmpfs 202 0 202 0% /run/shm
  11. # VPS示例提示 #

添加交换区SWAP

查看 当前SWAP大小

我们可以先查看一下当前的SWAP大小(单位 MB)。

  1. free m
  1. # VPS示例提示 #
  2. root@doub.io:~# free -m
  3. total used free shared buffers cached
  4. Mem: 244 141 103 0 38 76
  5. /+ buffers/cache: 26 218
  6. Swap: 127 0 127
  7. # VPS示例提示 #

创建 SWAP文件

从上面的VPS示例中可以看到,这个VPS物理内存约等于 256MB,所以可以添加 物理内存*2的SWAP=512MB 。

bs 是字节数,这里是1024 B,count 是blocks块数,of 是要输出的SWAP交换区文件(本文章仅为示例,文件和位置可以自己改)

所以: bs=1024 B=1 KB,512000 * 1 KB=512000 KB / 1024 ≈ 512 MB (为了直观的看,就按1000来算了 :lol:

  1. dd if=/dev/zero of=/var/swapfile1 bs=1024 count=512000
  1. # VPS示例提示 #
  2. root@doub.io:~# dd if=/dev/zero of=/var/swapfile1 bs=1024 count=512000
  3. 512000+0 records in
  4. 512000+0 records out
  5. 524288000 bytes (524 MB) copied, 4.09314 s, 128 MB/s
  6. # VPS示例提示 #

查看文件是否创建成功,大小是否正确(因为按1000计算,所以会不足 512MB)

  1. du ah /var|grep “swapfile1”
  1. # VPS示例提示 #
  2. root@doub.io:~# du -ah /var|grep “swapfile1”
  3. 501M /var/swapfile1

建立 SWAP文件

  1. mkswap /var/swapfile1
  1. # VPS示例提示 #
  2. root@doub.io:~# mkswap /var/swapfile1
  3. Setting up swapspace version 1, size = 511996 KiB
  4. no label, UUID=c48fef607d49450cbfd17a7826de7cdd
  5. # VPS示例提示 #

启用 SWAP文件

  1. swapon /var/swapfile1

启用 SWAP文件没有任何提示,启用后我们查看一下是否正常启用:

  1. swapon s
  2. free m

可以看到下面的SWAP中,成功添加启用了一个 SWAP交换区。

  1. # VPS示例提示 #
  2. root@doub.io:~# swapon -s
  3. Filename Type Size Used Priority
  4. /dev/vda2 partition 131068 0 1
  5. /var/swapfile1 file 511996 0 2
  6.  
  7. root@doub.io:~# free -m
  8. total used free shared buffers cached
  9. Mem: 244 240 4 0 34 175
  10. /+ buffers/cache: 30 214
  11. Swap: 627 0 627
  12. # VPS示例提示 #

开机启动加载

  1. echo “/var/swapfile1 swap swap defaults 0 0” >> /etc/fstab

如果你又不想要刚才新添加的SWAP了,那么可以取消它们。

取消 SWAP文件

  1. swapoff /var/swapfile1

取消 开机启动加载

  1. sed i “/swapfile1/d” /etc/fstab

取消后,可以再 free -m 查看一下SWAP,确定取消了,那么就可以删除 SWAP文件了。

删除 SWAP文件

  1. rm rf /var/swapfile1

有什么问题请在下面留言!

赞赏

微信赞赏支付宝赞赏

You may also like...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注