XEN/KVM VPS可以通过添加SWAP来给VPS提高一下性能。通过网络寻找这方面的资料,下面说一下VPS添加SWAP的方法。
Xen/KVM VPS添加SWAP的方法:
cd /var/
dd if=/dev/zero of=swapfile bs=1024 count=262144
/sbin/mkswap swapfile
/sbin/swapon swapfile
/sbin/swapon -s
vi /etc/fstab
功能:把指定的输入文件拷贝到指定的输出文件中,并且在拷贝过程中可以进行格式转换。可以用该命令实现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增加虚拟内存
增加虚拟内存
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
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解决办法
1
| virtual memory exhausted: Cannot allocate memory |
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 |
显然给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 |
1
2
3
| # mkswap /var/swap Setting up swapspace version 1, size = 3145724 KiB no label, UUID=138195eb-1d16-4b06-b6ad-b5b26fc71622 |
1
| # swapon swap |
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 |
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空间, 相关的参考如下:- 物理内存 交换分区(SWAP)
- <= 4G 至少4G
- 4~16G 至少8G
- 16G~64G 至少16G
- 64G~256G 至少32G
1.2 创建swap分区
Linux VPS主机设置swap空间的基本命令如下:- #查看swap分区的大小
- free -h
- #删除所有SWAP分区
- swapoff -a
- #创建swap分区的文件,其中bs是每块的大小,count是块的数量,bs*count,就是swap文件的大小了,这里就是1M*2048=2G
- dd if=/dev/zero of=/root/swapfile bs=1M count=2048
- #格式化交换分区文件:
- mkswap /root/swapfile
- #启用swap分区文件:
- swapon /root/swapfile
- #添加开机启动,修改 /etc/fstab 这个文件,添加或者修改这一行:
- /root/swapfile swap swap defaults 0 0 #适用于redhat或centos系统
- /root/swapfile none swap sw 0 0 #适用于Ubuntu系统
- #或者直接执行以下命令写入/etc/fstab
- echo "/root/swapfile swap swap defaults 0 0" >>/etc/fstab #适用于redhat或centos系统
- echo "/root/swapfile none swap sw 0 0" >>/etc/fstab #适用于Ubuntu系统
二、Linux真实使用内存
Linux的内存管理机制与Windows有所不同,linux系统中,是进程优先使用内存,而不是磁盘,这样会加快读取速度。当有新的进程启动时,再从内存中开辟出一定空间,为新的进程所用。即使进程退出,也不会立刻从内存中清理掉,这样可以加快下次启动进程的速度,所以内存一直是使用率很高的。那么如何查看Linux真实使用内存?2.1 命令查看
执行命令:free -h
可以查看Linux VPS主机的内存使用情况: - root@localhost:~# free -h
- total used free shared buff/cache available
- Mem: 2.0G 1.3G 382M 106M 280M 416M
- Swap: 2.7G 146M 2.5G
如上面的例子:使用了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;因此,Linux在进行内存回收(memory reclaim)的时候,实际上可以从1类和2类这两种页面里面进行回收,而swappiness值就决定了回收这2类页面的优先级。swappiness越大,越倾向于回收匿名页;swappiness越小,越倾向于回收file-backed的页面。当然,它们的回收方法都是一样的LRU算法。
2.anonymous pages(匿名页,如stack,heap,CoW后的数据段等;他们没有对应的硬盘文件,因此如果要交换,只能交换到swap分区),此部分页面,如果系统内存不充分,可以被swap到swapfile或者硬盘的swap分区。
在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交换分区的使用):- cat /proc/sys/vm/swappiness
- #60
- #临时性修改:
- sudo sysctl vm.swappiness=10
- #永久性修改:
- #在/etc/sysctl.conf 文件里添加如下参数:
- vm.swappiness=10
- #然后重启系统
四、总结
对于Linux,无论是多大内存,还是要设立Swap交换分区,这样特别有利于在内存耗尽时及时启用Swap空间。我们经常看到Linux的内存占用达到90%以上,这是因为Linux的内存管理机制与Windows有所不同,实际使用内存还是比较小的。一般来说swappiness设置在10-20之间,这个需要根据你自己的网站的业务需要。例如想要尽量保持稳定的话,可以把swappiness的数值调高,想要加快读取速度可以把swappiness设置得低一些,不建议把swappiness设置为0,容易造成进程崩溃.
-----------------------------------------------
swap分区的添加/删除/配置
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分区
1、创建交换文件
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、格式化交换文件
3、挂载新交换分区
free -h
或swapon -s
查看,现在的swap分区大小,其实已经等于原分区加上你现在创建的分区大小了。4、设置开机自动挂载分区
5、配置交换分区
/etc/sysctl.conf
文件的最后,你想用vi/vim
编辑再添加也是一样的:删除swap分区
1、停止正在使用swap分区
2、删除swap分区文件
3、去掉启动自动挂载
简介
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 |
启用 Swap
创建好 Swap 文件,还需要格式化后才能使用。
#初始化并激活Swap |
如果要机器重启的时候自动挂载 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