Pages

Tuesday, 29 March 2016

给VPS添加SWAP(Xen/kvm)

(openvz vps需要母鸡权限,vzctl set 33 --swappages 0:1024M --save。openvz小鸡没法自行添加内存.)
XEN/KVM VPS可以通过添加SWAP来给VPS提高一下性能。通过网络寻找这方面的资料,下面说一下VPS添加SWAP的方法。
Xen/KVM VPS添加SWAP的方法:
1、进入一个目录
cd /var/
2、获取256M的文件块:
dd if=/dev/zero of=swapfile bs=1024 count=262144
3、创建swap文件
/sbin/mkswap swapfile
4、激活swap文件
/sbin/swapon swapfile
5、查看一下swap是否正确:
/sbin/swapon -s
6、加到fstab文件中让系统引导时自动启动
vi /etc/fstab
在末尾增加以下内容:
/var/swapfile swap swap defaults 0 0
也可以执行如下命令,感觉这样更方便
echo "/var/swapfile swap swap defaults 0 0" >>/etc/fstab
顺便附上DD命令的参数介绍:
功能:把指定的输入文件拷贝到指定的输出文件中,并且在拷贝过程中可以进行格式转换。可以用该命令实现DOS下的diskcopy命令的作用。先用dd命令把软盘上的数据写成硬盘的一个寄存文件,再把这个寄存文件写入第二张软盘上,完成diskcopy的功能。需要注意的是,应该将硬盘上的寄存文件用rm命令删除掉。系统默认使用标准输入文件和标准输出文件。
语法:dd [选项] if = 输入文件(或设备名称)。 of = 输出文件(或设备名称)。 ibs = bytes
一次读取bytes字节,即读入缓冲区的字节数。 skip = blocks 跳过读入缓冲区开头的ibs*blocks块。 obs =
bytes 一次写入bytes字节,即写入缓冲区的字节数。 bs = bytes 同时设置读/写缓冲区的字节数(等于设置ibs和obs)。
cbs = byte 一次转换bytes字节。 count=blocks 只拷贝输入的blocks块.
 -------------------


Linux中的swap交换分区就相当于我们使用windows的时候说到的虚拟内存,如果你的vps内存较小可以适当添加swap。注意:openvz无法自己添加。
1、检查 Swap 空间
在设置 Swap 文件之前,有必要先检查一下系统里有没有既存的 Swap 文件。
运行以下命令:
swapon -s
如果返回的信息概要是空的,则表示 Swap 文件不存在。
2、检查文件系统
在设置 Swap 文件之前,同样有必要检查一下文件系统,看看是否有足够的硬盘空间来设置 Swap 。运行以下命令:
df -hal
检查返回的信息,还剩余足够的硬盘空间即可。
3、创建并允许 Swap 文件
下面使用 dd 命令来创建 Swap 文件。
dd if=/dev/zero of=/home/swapfile bs=1024 count=1024k
参数解读:
if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >
of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >
bs=bytes:同时设置读入/输出的块大小为bytes个字节
count=blocks:仅拷贝blocks个块,块大小等于bs指定的字节数。
4、格式化并激活 Swap 文件
上面已经创建好 Swap 文件,还需要格式化后才能使用。运行命令:
mkswap /home/swapfile
激活 Swap ,运行命令:
swapon /home/swapfile
以上步骤做完,再次运行命令:
swapon -s
你会发现返回的信息概要:
Filename                    Type        Size    Used    Priority
/home/swapfile               file        524284    0     -1
如果要机器重启的时候自动挂载 Swap ,那么还需要修改 fstab 配置。
用 vim 打开 /etc/fstab 文件,在其最后添加如下一行:
/home/swapfile           swap                    swap    defaults        0 0
最后,赋予 Swap 文件适当的权限:
chown root:root /home/swapfile 
chmod 600 /home/swapfile
同时,我们还可以修改 Linux Swap 空间的 swappiness ,降低对硬盘的缓存。
Linux 会使用硬盘的一部分做为 Swap 分区,用来进行进程调度–进程是正在运行的程序–把当前不用的进程调成‘等待(standby)’,甚至‘睡眠(sleep)’,一旦要用,再调成‘活动 (active)’,睡眠的进程就会在 Swap 分区,把内存空出来让给‘活动’的进程。
如果内存够大,应当告诉 Linux 不必太多的使用 Swap 分区,可以通过修改 swappiness 的参数来设置。swappiness=0 的时候表示最大限度使用物理内存,然后才是 Swap 空间,swappiness=100 的时候表示积极的使用 Swap 分区,并且把内存上的数据及时的搬运到 Swap 空间里面。
在 CentOS 中,swappiness 的默认值是60。
通过以下命令可以看到:
cat /proc/sys/vm/swappiness
返回值60
我们可以调整 swappiness 的值到一个合适的参数,从而达到最优化使用 Swap 的目的。这里我们将其设为10。
使用 sysctl 命令:
sysctl vm.swappiness=10
但是这只是临时性的修改,在你重启系统后会恢复默认的60,要永久设置,还需要在 vim 中修改sysctl.conf:
vi /etc/sysctl.conf
在这个文档的最后加上这样一行:
# Search for the vm.swappiness setting.  Uncomment and change it as necessary.
vm.swappiness=10
输入:x,保存退出 vim 。
这样一来,Swap 分区重启后都会生效了。
参考链接:https://teddysun.com/321.html
-------------








Linux增加虚拟内存


Linux和Windows都有虚拟内存,其通常是作为内存不足情况下的替代品,避免内存不足情况下的服务异常。内存的读写速度远高于硬盘读写速度,所以当实际内存充足的情况下使用虚拟内存反而会降低系统的运行速度,频繁读写也会降低硬盘的使用寿命,所以不建议在大内存系统中设置虚拟内存
Linux的内存回收机制和Windows有些差异,Linux会尽可能的利用实际内存,只有在内存不足的情况下才会使用虚拟内存。而Windows的内存回收机制,则是“当应用程序不需要时释放其实际内存而转入虚拟内存”。因为二者系统整体相差很大,所以难以直接比较谁优谁劣,性能方面对于一般用户的日常使用而言,差别不大。

增加虚拟内存

在一些小内存VPS中增加虚拟内存往往是必要的,可以很大程度上避免因内存不足而杀死服务进程的情况。增加虚拟内存只能在KVM或者Xen架构的VPS中进行,通常设置的虚拟内存大小和实际内存大小一致或是其的两倍,常见的OpenVZ架构VPS因权限不足无法修改虚拟内存。
1.新建文件夹以存放swap文件
mkdir /swap
2.生成文件:将在/swap目录生成swapfile文件,大小为512MB。实际上为500MB,因为这里的512000单位为KB,换算单位为1024KB=1MB
dd if=/dev/zero of=/swap/swapfile bs=1024 count=512000
3.生成swap
mkswap /swap/swapfile
4.激活swap
swapon /swap/swapfile
5.开机自动挂载
echo "/swap/swapfile swap swap default 0 0" > /etc/fstab
对于懒人或者新手来说,可以直接使用下列这条合成的命令,一条命令就能够增加512MB的虚拟内存并添加开机启动。
mkdir /swap;dd if=/dev/zero of=/swap/swapfile bs=1024 count=512000;mkswap /swap/swapfile;swapon /swap/swapfile;echo "/swap/swapfile swap swap default 0 0" > /etc/fstab
-----------







VPS编译程序时virtual memory exhausted: Cannot allocate memory解决办法


今天在VPS上用pip安装gevent,结果遇到报错:
1
virtual memory exhausted: Cannot allocate memory
上网查了一下,有的人说看 ulimit -a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7899
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 7899
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
里面的max memory size和virtual memory设置成比VPS的内存小就行了,分别用 ulimit -m 60000 和 ulimit -v 60000设置成功了,但问题依旧。
显然给VPS加内在的方法太麻烦了,得重做系统。接着又在网上找到了用swap扩展内存的方法,具体做法是建一个大文件做swap用。
先建一个3G大的文件
1
2
3
4
# dd if=/dev/zero of=/var/swap bs=1M count=3072
3072+0 records in
3072+0 records out
3221225472 bytes (3.2 GB) copied, 16.7703 s, 192 MB/s
使用 mkswap 将 /var/swap 这个文件格式化为 swap 的文件格式:
1
2
3
# mkswap /var/swap
Setting up swapspace version 1, size = 3145724 KiB
no label, UUID=138195eb-1d16-4b06-b6ad-b5b26fc71622
使用swapon来将 /var/swap 启动
1
# swapon swap
这样就OK了,看一下新的内存情况
1
2
3
4
5
# free
             total       used       free     shared    buffers     cached
Mem:       1019048     952148      66900          0       5172     100576
-/+ buffers/cache:     846400     172648
Swap:      3145724          0    3145724
用完之后再关掉swap
1
2
3
4
5
6
# swapoff swap
# free
             total       used       free     shared    buffers     cached
Mem:       1019048     947136      71912          0       6840      91816
-/+ buffers/cache:     848480     170568
Swap:            0          0          0
之后的大文件也可以删除掉了。
 --------------------

Linux vps下配置虚拟内存

虚拟内存是操作系统物理内存不足时对系统内存的一个补充。
操作系统在内存不足时,会将物理内存中不常用的内存页 (一段内存区块) 保存到磁盘上,这个过程被称为「换页」。
虚拟内存是物理内存的延伸,它能让系统跨越物理配置的限制,对内存容量进行「升级」,用磁盘替代物理内存,让机器看起来像是有了更多内存。但要注意的是,如果大量使用虚拟内存,系统产生过多换页行为,将会导致系统变得非常缓慢。毕竟磁盘的 IO 性能比起真实的物理内存的 IO 性能要慢好几个数量级。
所以虚拟内存通常只是用于缓解机器的内存压力,要彻底解决内存问题,仍然需要升级机器的配置。因此虚拟内存的容量通常不宜设得过大,因为过大也没有用。而通常的,虚拟内存应当设置为物理内存大小的 1~2 倍。
虚拟内存在 Linux 下所被存储的磁盘空间又被称之为「交换空间」 (swap)。

如果是手动安装的 Linux 发行版,那么在系统安装的时候就会提示你是否设置交换空间,或默认就为你设置了交换空间。而这时所设置的交换空间通常在磁盘中单独占一个分区。而如果是云服务器所提供的操作系统,出于性能考虑,所以默认没有设置交换空间,这一点可以通过 free 命令查看:
$ free -h
              total        used        free      shared  buff/cache   available
Mem:           592M        223M         88M         16M        280M        259M
Swap:            0B          0B          0B
其中 Swap 显示为 0B, 0B, 0B 表示系统中没有配置交换空间。
而我这里简单介绍一下如何在云服务器上配置交换空间。
由于在云服务器上,磁盘已经进行分区,想要在不影响现有系统的情况下重新对磁盘分区来设置交换分区困难略大,所以这里介绍一下如何通过交换文件的方式实现虚拟内存。
首先通过 dd 命令创建一个所需大小的空文件用来作为交换文件,这里以 1024 M 的交换文件为例:
sudo dd if=/dev/zero of=/swapfile count=1024 bs=1M
这里 dd 命令将文件写入到 /swapfile 的位置,每个块为 1M 大小,写入 1024 个块,一共是 1024M。
然后由于内存中的数据应当是需要保密的,不能让其他进程读取交换空间的内容,需要对 /swapfile 的读写权限加以限制:
sudo chown root:root /swapfile
sudo chmod 0600 /swapfile
然后格式化交换文件:
sudo mkswap /swapfile
挂载交换空间:
sudo swapon /swapfile
再次使用 free 命令查看挂载是否成功:
$ free -h
              total        used        free      shared  buff/cache   available
Mem:           592M        219M         48M         16M        324M        266M
Swap:          1.0G          0B        1.0G
Swap 为 1.0G, 0B, 1.0G 表示挂载成功了。
如果需要卸载交换空间,则需要使用命令 swapoff:
sudo swapoff /swapfile
-------------------------


Linux VPS主机设置swap分区以及内存分配控制优化swappiness配置

Linux系统一般都需要配置一点swap分区,桌面配置多一点,服务器配置少一点。而对于swap分区的具体使用细节,由一个叫swappiness参数来控制。 如果内存够大,那么这个时候应该让 linux 不必太多的使用swap分区, 可以通过修改swappiness的数值。
当swappiness为0的时候表示最大限度使用物理内存,然后才是 swap空间,当swappines为100的时候,则表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。在CentOS、Red Hat、ubuntu等系统中,swappiness的默认值都为60。
如果Linux服务器的内存很小,那么可以不用更改这个值,因为毕竟考虑到内存不够用而去借用swap的情况。而相对于很多服务器来说,目前还是建议设置在值为25以下,如果超过了8G内存,而且目前内存使用量还有剩余的话,建议直接将swappiness改成0,这样可以最大限度的使用物理内存,减少硬盘的负载,同时加快速度。
这篇文章就来分享一下如何给自己的Linux VPS主机设置Swap分区,以及如何优化Linux内存和Swap分区的分配关系.

一、VPS设置swap空间

1.1 swap要多大?

综合网上的相关资料,一般来说2GB的内存的VPS至少要2GB的Swap空间, 相关的参考如下:
  1. 物理内存 交换分区(SWAP)
  2. <= 4G 至少4G
  3. 4~16G 至少8G
  4. 16G~64G 至少16G
  5. 64G~256G 至少32G

1.2 创建swap分区

Linux VPS主机设置swap空间的基本命令如下:
  1. #查看swap分区的大小
  2. free -h

  3. #删除所有SWAP分区
  4. swapoff -a

  5. #创建swap分区的文件,其中bs是每块的大小,count是块的数量,bs*count,就是swap文件的大小了,这里就是1M*2048=2G
  6. dd if=/dev/zero of=/root/swapfile bs=1M count=2048

  7. #格式化交换分区文件:
  8. mkswap /root/swapfile

  9. #启用swap分区文件:
  10. swapon /root/swapfile

  11. #添加开机启动,修改 /etc/fstab 这个文件,添加或者修改这一行:

  12. /root/swapfile swap swap defaults 0 0 #适用于redhat或centos系统
  13. /root/swapfile none swap sw 0 0 #适用于Ubuntu系统

  14. #或者直接执行以下命令写入/etc/fstab

  15. echo "/root/swapfile swap swap defaults 0 0" >>/etc/fstab #适用于redhat或centos系统
  16. echo "/root/swapfile none swap sw 0 0" >>/etc/fstab #适用于Ubuntu系统

二、Linux真实使用内存

Linux的内存管理机制与Windows有所不同,linux系统中,是进程优先使用内存,而不是磁盘,这样会加快读取速度。当有新的进程启动时,再从内存中开辟出一定空间,为新的进程所用。即使进程退出,也不会立刻从内存中清理掉,这样可以加快下次启动进程的速度,所以内存一直是使用率很高的。那么如何查看Linux真实使用内存?

2.1 命令查看

执行命令:free -h可以查看Linux VPS主机的内存使用情况:
  1. root@localhost:~# free -h
  2. total used free shared buff/cache available
  3. Mem: 2.0G 1.3G 382M 106M 280M 416M
  4. Swap: 2.7G 146M 2.5G
Linux VPS主机真实内存占用到底是多少呢?用 free 指令查看一下输出,用 used 减去 buffer 和 cache,才是你运行中的程序所占用的空间。
如上面的例子:使用了4G的内存,3.7G被占用,但是buuffer和cached部分作为缓存,可以使用命中率的方式提高使用效率,而且这部分缓存是根据指令随时可以释放的,我们可以认为这部分内存没有实际被使用,也可以认为它是空闲的,即真实内存=1.3G-0.28G
因此查看目前进程正在实际被使用的内存,是used-(buffers+cache),也可以认为如果swap没有大量使用,mem还是够用的,只有mem被当前进程实际占用完(没有了buffers和cache),才会使用到swap的。

2.2 工具查看

在'Linux系统监控命令整理汇总'一文中我们分享了htop这个高级监控命令,它和top命令十分相似,但是它具有更丰富的特性,例如用户可以友好地管理进程,快捷键,垂直和水平方式显示进程等等。其中内存一栏绿色的就表示是真实的占用内存

三、Linux内存分配控制

3.1 swappiness参数

swappiness是Linux的一个内核参数,控制系统在进行swap时,内存使用的相对权重。swappiness参数值可设置范围在0到100之间。 此参数值越低,就会让Linux系统尽量少用swap分区,多用内存;参数值越高就是反过来,使内核更多的去使用swap空间。




Ubuntu系统swappiness默认值为60,表示的含义可以这样来理解,当剩余物理内存低于40%(40=100-60)时,开始使用swap分区。CentOS系统此参数的默认值是30。设置为100可能会影响整体性能,如果内存充足,就可以将这个值设置很低,甚至为0,以避免系统进行swap而影响性能。

3.2 swappiness=0 ?

我们都知道,Linux的进程使用的内存分为2种:
1.file-backed pages(有文件背景的页面,比如代码段、比如read/write方法读写的文件、比如mmap读写的文件,它们有对应的硬盘文件,因此如果要交换,可以直接和硬盘对应的文件进行交换;比如读取一个文件,没有关闭,也没有修改,交换时,就可以将这个文件直接放回硬盘,代码处理其实就是删除这部分内容,只保留一个索引,让系统知道这个文件还处于打开状态,只是它的内容不在内存,还在硬盘上),此部分页面叫做page cache;
2.anonymous pages(匿名页,如stack,heap,CoW后的数据段等;他们没有对应的硬盘文件,因此如果要交换,只能交换到swap分区),此部分页面,如果系统内存不充分,可以被swap到swapfile或者硬盘的swap分区。
因此,Linux在进行内存回收(memory reclaim)的时候,实际上可以从1类和2类这两种页面里面进行回收,而swappiness值就决定了回收这2类页面的优先级。swappiness越大,越倾向于回收匿名页;swappiness越小,越倾向于回收file-backed的页面。当然,它们的回收方法都是一样的LRU算法。




在Linux的早期版本(2012年以前的版本,kernel 3.5-rc1),哪怕swappiness被设置为0,其实匿名页仍然有被交换出去的机会。2012年开始,这个细节有了变化。https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=fe35004fbf9eaf67482b074a2e032abb9c89b1dd




如果swappiness=0,除非系统的内存过小(nr_free + nr_filebacked < high watermark)这种恶劣情况发生,都只是考虑交换file-backed的pages,就不会考虑交换匿名页了。




于是现在的swappiness如果等于0的话,意味着哪怕匿名页占据的内存很大,哪怕swap分区还有很多的剩余空间,除非恶劣情况发生,都不会交换匿名页,因此这可能造成更大的OOM(Out Of Memory)压力。不像以前,平时会一直兼顾着回收page cache和匿名页。所以,现在如果想将swappiness设置为0,那是要好好想想的了。

3.3 swappiness设置

如何查看系统当前的swappiness值?命令如下(数值为60,表示你的内存在使用到100-60=40%的时候,就开始出现有Swap交换分区的使用):
  1. cat /proc/sys/vm/swappiness
  2. #60
如何配置swappiness值?使用以下命令可以设置swappiness值:
  1. #临时性修改:
  2. sudo sysctl vm.swappiness=10

  3. #永久性修改:
  4. #在/etc/sysctl.conf 文件里添加如下参数:
  5. vm.swappiness=10

  6. #然后重启系统

四、总结

对于Linux,无论是多大内存,还是要设立Swap交换分区,这样特别有利于在内存耗尽时及时启用Swap空间。我们经常看到Linux的内存占用达到90%以上,这是因为Linux的内存管理机制与Windows有所不同,实际使用内存还是比较小的。
一般来说swappiness设置在10-20之间,这个需要根据你自己的网站的业务需要。例如想要尽量保持稳定的话,可以把swappiness的数值调高,想要加快读取速度可以把swappiness设置得低一些,不建议把swappiness设置为0,容易造成进程崩溃.

-----------------------------------------------

swap分区的添加/删除/配置

swap分区除了在安装系统的时候可以创建,在安装系统后还可以在系统里添加,比如VPS不够内存,想暂时增加就可以用这种办法。
添加前:
root > free -h
              total        used        free      shared  buff/cache   available
Mem:           482M        248M         12M         25M        221M        172M
Swap:          511M        150M        361M
添加后:
root > free -h
              total        used        free      shared  buff/cache   available
Mem:           482M        251M         14M         42M        217M        151M
Swap:          1.5G        242M        1.2G

添加swap分区

注意,这里说的添加swap分区,是在原有交换分区不够的情况下,自己再添加,而不是修改原有的,因为对于VPS来说,你在VPS里面是无法动原来的磁盘分区的。

1、创建交换文件

dd  if=/dev/zero  of=/var/swapfile  bs=1024  count=2048k
Bash
dd: disk dump,dump查单词可能有“倾倒”的意思,这里“disk dump”的意思是“磁盘转储”;
if: input file,输入文件,其中/dev/zero是Linux的一种特殊字符设备(输入设备),可以用来创建一个指定长度用于初始化的空文件,如临时交换文件,该设备无穷尽地提供0,可以提供任何你需要的数目;
of: output file,输出文件;
bs: block size,单位数据块大小(同时读入/输出的块字节大小),可以用k/m这些单位,不使用单位则默认单位是“字节(Byte)”。
count: 数据块的数量,也可以用单位,创建的交换文件空间大小=bs×count,也就是你每块多大×一共多少块。所以本例创建的交换文件空间大小为:1024(即1k)×2048k(即2048×1024)=1024×2097152=2,147,483,648=2G。

2、格式化交换文件

mkswap  /var/swapfile
Bash

3、挂载新交换分区

swapon   /var/swapfile
Bash
执行swapon命令后后可能会提示:不安全的权限 0644,建议使用 0600”类似提示,其实已经激活了,你可以用free -hswapon -s查看,现在的swap分区大小,其实已经等于原分区加上你现在创建的分区大小了。
至于权限提示,你可以忽略,也可以听从系统的建议修改下权限(当然我一般都会修改):
chmod -R 0600 /var/swapfile
Bash

4、设置开机自动挂载分区

echo  "/var/swapfile   swap  swap  defaults  0  0" >>  /etc/fstab
Bash

5、配置交换分区

我们可以通过修改swappiness值(0-100)来决定系统对swap分区的依赖程度,越高则越倾向于使用swap分区。
越依赖swap会造成物理内存远未使用完,就使用swap分区,我们知道swap分区性能远不如物理内存(毕竟是硬盘虚拟出来的),这反而降低了系统性能,当然如果是固态硬盘,可以适当增加对swap的依赖程度,毕竟固态硬盘的速度比普通的HDD快的多了。
如果希望在物理内存即将满荷时再使用swap,swappiness值一般为10-60为宜,固态硬盘可以偏高些。
查看当前的swappiness数值:
cat   /proc/sys/vm/swappiness
Bash
设置swappiness值,这里以50为例:
sysctl vm.swappiness=50
Bash
按照Linux的国际惯例,要让配置永久生效,必定要把配置写到配置文件中,这里我用echo直接添加到/etc/sysctl.conf文件的最后,你想用vi/vim编辑再添加也是一样的:
echo "vm.swappiness = 50"  >>  /etc/sysctl.conf
Bash

删除swap分区

1、停止正在使用swap分区

swapoff  /var/swapfile
Bash

2、删除swap分区文件

rm -rf   /var/swapfile
Bash

3、去掉启动自动挂载

删除或注释掉我们之前在fstab文件里追加的开机自动挂载配置内容:
/var/swapfile   swap  swap  defaults  0  0
--------------------------------------------

添加虚拟内存

 简介

Linux中Swap(即:交换分区),类似于Windows的虚拟内存,就是在内存不够的情况下,系统把内存中不常用到的程序放入Swap,解决物理内存不足的情况。

但是如果开始使用 SWAP 的时候系统通常都会变得十分缓慢,因为硬盘 IO 占用的十分厉害,除非是 SSD 的情况下,速度才有可能稍微快一点。

提示:只有虚拟化为Xen、KVM、VMWare的VPS可以,OpenVZ不支持添加swap。

步骤

1、确认是否有SWAP,可以执行

free -m

命令查看,如果有swap一行且total项下不为零的话就是已经存在swap,就不适合再进行添加swap。

2、使用root用户登陆,进入一个目录

cd /var/

3、获取512MB的文件块:(一般设置为内存的2倍,count后面的数为要设置的swap大小xxMB,以下以1G为例)

dd if=/dev/zero of=swapfile bs=1M count=1024

4、创建swap文件

/sbin/mkswap swapfile

SSH 执行以上命令,将生成的 swapfile 制作为 SWAP 文件,若没有制作 SWAP 文件,执行下一步可能会出现:swapon: vpppscom: read swap header failed: Invalid argument 错误。

5、激活swap文件

/sbin/swapon swapfile

6、查看一下swap是否正确:

/sbin/swapon -s

另外为了安全建议执行:

chmod 0644 /var/swapfile

改一下权限

7、加到fstab文件中让系统引导时自动启动

vi /etc/fstab

在末尾增加以下内容:

/var/swapfile swap swap defaults 0 0

也可以直接执行如下命令,感觉这样更方便:

echo "/var/swapfile swap swap defaults 0 0" >>/etc/fstab

SWAP删除方法:

/sbin/swapoff /var/swapfile

rm -f /var/swapfile

删掉添加的自动挂载swap的设置:

vi /etc/fstab

------------------

Linux vps下,增加、删除 Swap 文件

在使用 VPS 时,如果出现内存不够用的情况,可能会产生各种奇怪的问题。这个时候,增加 Swap 空间,就可以起到救急的作用。下面就来看看具体步骤。

创建 Swap 文件

检查 Swap 空间

先检查一下系统里有没有既存的 Swap 文件:

swapon -s

如果返回的信息概要是空的,则表示 Swap 文件不存在。

创建 Swap

使用 fallocate 为 Swap 文件预分配空间:

fallocate -l 1G /swapfile

如果 fallocate 分配空间不成功的话,可以用 dd 命令代替:

dd if=/dev/zero of=/swapfile bs=1024 count=1048576 #分配1G的Swap空间

参数说明:

  • if=input file:输入文件名,缺省为标准输入。即指定源文件。
  • of=output file:输出文件名,缺省为标准输出。即指定目的文件。
  • bs=bytes:同时设置读入 / 输出的块大小为 bytes 个字节,取为 1024。
  • count=blocks:拷贝的块数,块大小等于 bs 指定的字节数。将前面算出的数字填入即可。

我们需要根据需求(即要分配的 Swap 文件的大小)来计算出参数。上面示范的做法是,每次读写 1KiB,重复 N 次,这样可以兼顾内存消耗和读写次数。因此,如果以 MiB 为单位计算你要分配的 Swap 文件的大小,那么读写次数(拷贝的块数)就是将该值乘以 1024 得到结果。例如,块大小为 1KiB 时,64MiB 的 Swap 文件拷贝的块数是 65536,而 1GiB 的 Swap 文件则是 1048576。

这里的 if=/dev/zero 意味着向 /swapfile 填满空字符。经笔者测试,将它换成 /dev/urandom,也可以正常初始化。

权限设置

分配空间后,需要赋予 Swap 文件适当的权限:

chown root:root /swapfile
chmod 0600 /swapfile

启用 Swap

创建好 Swap 文件,还需要格式化后才能使用。

#初始化并激活Swap
mkswap /swapfile
swapon /swapfile

如果要机器重启的时候自动挂载 Swap,那么还需要修改 fstab 配置。
vim 打开 /etc/fstab 文件,在其最后添加如下一行:

/swapfile none swap sw 0 0

当下一次系统启动时,新的 Swap 文件就打开了。
添加新的 Swap 文件并开启后,检查 cat /proc/swaps 或者 free 命令的输出来查看 swap 是否已打开。

删除 Swap 分区

最后,是删除 Swap 分区的方法。

swapoff /swapfile #卸载swap文件
rm -rf /swapfile #删除文件

---------------------

相关帖子:
http://briteming.blogspot.com/2012/01/xen-vpsswap.html
http://briteming.blogspot.com/2015/11/swap.html