云服务器增加虚拟内存
本文环境:CentOS 7
如果云服务器上运行了较多的应用,当内存不足时,就会发生宕机的情况。可以通过增加虚拟内存的方式,提高总的内存容量,以解决这一问题。
创建 swap 分区
查看内存使用情况
free -h
解释一下看到的信息:
- Mem 这一行显示了服务器的物理内存的使用情况。
- Swap 这一行显示了虚拟内存的使用情况,如果没有创建过虚拟内存,则为0。
创建 swap 文件
创建名为 swapfile 、大小为 4G 的 swap 文件(执行需要几十秒):
dd if=/dev/zero of=/var/swapfile bs=1024 count=4194304
解释一下这段代码:
- dd:用于读取、转换并输出数据的命令
- if=/dev/zero:参数
if
用于指定源文件,这里我们用/dev/zero
,是因为它是“零”设备,可以无限的提供空字符。 - of=/var/swapfile:参数
of
用于指定目的文件,这里我们指定文件的路径是/var/swapfile
。 - bs=1024:参数
bs
指 block size,用于设置单位数据块同时读入/输出的块字节大小,这里我们设定为 1024 字节,即 1KB 。 - count=4194304:参数
count
用于设置拷贝块的个数,我们设定的个数是 4194304 = 1024 * 1024 * 4 ,加上前面设定了每个块的大小是 1KB,因此 swap 文件总大小为 1024 * 1024 * 4 * 1 KB = 4 GB 。
建立 swap 分区
用 mkswap 命令建立 swap 分区,并指定 swap 文件是刚才创建好的 /var/swapfile
mkswap /var/swapfile
激活 swap 分区
swapon /var/swapfile
如果出现提示【不安全的权限 0644,建议使用 0600】,可以忽略,也可以听从建议修改权限。
chmod -R 0600 /var/swapfile
激活后,可以使用 free -h
查看系统内存情况。
修改 swap 配置
开机自动挂载 swap 分区
echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab
调整系统使用 swap 分区的策略
系统使用虚拟内存是有一定策略的,通过参数 swappiness 来平衡。不同系统的默认值不太一样,Ubuntu 是 60,Linux 是 30。
swappiness 的值,越大表示越积极使用 swap 分区,越小表示越积极使用物理内存。以值取 30 为例,代表了当剩余物理内存小于 30% 时,系统开始使用 swap 分区。
一般的建议是:
- 如果内存充足,就将 swappiness 值设置很低,甚至为0,以避免系统进行 swap 而影响性能。
- 如果内存不足,就将 swappiness 值设大,让系统更多地使用 swap 分区,但不要设太大(除非是 SSD ),一般设置在 10 ~ 50 之间即可。
查看当前的 swappiness 值:
cat /proc/sys/vm/swappiness
(临时)修改 swappiness 值为 10:
sysctl vm.swappiness=10
(永久)修改 swappiness 值为 10:
echo "vm.swappiness = 10" >> /etc/sysctl.conf
删除 swap 分区
讲完了怎么创建,再讲讲怎么复原,需要 3 步:
step1. 停止正在使用的 swap 分区
swapoff /var/swapfile
step2. 删除swap分区文件
rm -rf /var/swapfile
step3. 删除或注释掉之前在 /etc/fstab
文件里追加的开机自动挂载配置内容,以及在 /etc/sysctl.conf
文件里追加的 swappiness 值。
vim /etc/fstab # 注释这一行: /var/swapfile swap swap defaults 0 0
vim /etc/sysctl.conf # 注释这一行: vm.swappiness = 10
网友评论