CentOS 7系统增加swap

转载请注明文章出处:CentOS 7系统增加swap

swap是位于磁盘上的特殊文件(或分区),属于“虚拟内存”的一部分。通俗点就是内存的备胎,内存充足的情况下,基本上没swap什么事(和设置有关);内存不够用时系统便将内存中的部分数据腾挪到swap中,为正在运行的程序腾出内存。

使用swap能让系统运行更多或更大型的程序,但由于swap的读写速度远逊于内存,频繁使用swap可能让系统和程序有延迟卡顿。

大内存计算机swap有必要吗?

对于内存较小的计算机,swap是非常有必要的。swap的存在能让执行吃内存程序变得可能,执行慢总比不能运行或者奔溃强。但现代计算机动辄8G以上的内存,如非运行大型或专业软件,内存足够日常使用。这种情况下,swap有存在的必要吗?

答案还是看使用场景。个人电脑上运行桌面版Linux并且开启休眠功能,则应该划分不小于内存的swap分区;如果是内存足够大且常年不关机的服务器,没有swap也毫无问题。

ssd硬盘要不要设置swap?

之前的ssd硬盘有读写寿命的问题,因此不建议将swap文件或分区放到ssd硬盘上。

目前的ssd硬盘技术已经升级换代更智能,如果有swap需求,放在ssd硬盘上也没什么问题。

swap设置多大好?

如果开启休眠功能,应该划分swap分区,并且分区大小不能小于内存,建议的值是“内存大小+2G”。

不用休眠功能的服务器,swap可以为文件,一种确定swap大小的实用方法是:1G内存及以下,swap大小为内存的两倍;2-4G内存,与内存同等大小;5-16G内存,swap可固定为4G;17-32G内存,8G swap;33 G及以上,固定为16G swap。

上述方法不绝对,有特殊需求可酌情增减swap大小。

怎样增加swap?

安装操作系统时候可以分区(单独挂载点)形式指定swap,也可以在系统安装完成后动态添加和删除。

查看swap

free命令可以查看系统活动的swap信息,例如:

$ free -m
# 输出如下
#               total        used        free      shared  buff/cache   available
# Mem:           7976        4979         328         124        2669        2703
# Swap:             0           0           0

第二行是swap信息,可以看到没有活动的swap。

也可以用swapon命令查看活动的swap,例如:

$ swapon -s
# 没有swap信息,所以无输出
# 有swap的输出为
# Filename              Type        Size    Used    Priority
# /swap                                     file    2097148 281052  -2

增加swap

假设我们打算运行一个非常占用内存的程序,8G物理内存不够,便可借助swap增加系统可用的虚拟内存。操作方法如下:

  1. 选定或创建一个作为swap的文件(也可以用分区),常用创建指定大小文件的命令有fallocatedd。例如创建一个8G大小的文件:

    <pre># fallocate

sudo fallocate -l 8G /swap

dd

sudo dd bs=1GB count=8 if=/dev/zero of=/swap
</pre>


由于`dd`有复制的过程执行较慢,实践中建议用`fallocate`;
  1. swap文件会存放内存中的数据,出于安全考虑应限制其它用户的访问:sudo chmod 0600 /swap;
  2. 将文件格式化为swap文件:sudo mkswap /swap
  3. 启用该swap文件:sudo swapon /swap;如果不想使用swap,可用swapoff命令卸载:sudo swapoff /swap
  4. 如果希望系统启动后自动加载swap文件,在/etc/fstab文件增加一行:/swap swap swap sw 0 0

增加swap后,可用swapon -sfree -m命令查看swap信息。

swap相关设置

和swap最直接相关,也是影响系统性能的一个设置参数便是vm.swappiness。其值是0-100的整数,指示内存用掉百分之多少时开始使用swap。100表示尽可能使用swap,0则表示只有物理内存不够时才用上swap备胎。对于服务器,建议10-30之间。

设置和更改swappiness的命令是:sudo sysctl vm.swappiness=10。该命令只对当前系统有效,系统重启后又恢复默认值。要想设置永久生效,在/etc/sysctl.conf中增加或更改对应的设置行:vm.swappiness = 10

参考

  1. https://www.digitalocean.com/...

tlanyan
关注技术原理,日进一尺
1.1k 声望
97 粉丝
0 条评论
推荐阅读
C/C++如何只保留4位有效数字?
朋友要用数值算例验证舍入误差对算法稳定性的影响,实践中遇到的第一个问题是:C/C++如何只保留4位有效数字(significant figures)?

tlanyan1阅读 6.6k

配置VMware中联网的两种方式:Net模式&桥接模式
实践环境:VMware12Pro、CentOS7Net模式和桥接模式联网的区别:桥接模式:选择桥接模式的话虚拟机和宿主机在网络上就是平级的关系,相当于连接在同一交换机上。NAT模式:NAT模式就是虚拟机要联网得先通过宿主机才...

GoodLifeBro阅读 1.2k

无外网情况下的centos软件安装
有些时候在一些内网环境部署机器的时候,要用一个跳板机,再通过跳板机ssh到目标机器,最后发现目标机器是不能访问外网的,目标机器居然还不能反向ping跳板机或者ssh到跳板机,通过iptables -nvL和ip route以及ar...

龚正阳1阅读 532

CentOS安装Redis
如果要安装最新的redis,需要安装Remi的软件源,官网地址:[链接]yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm然后可以使用下面的命令安装最新版本的redis:yum --enablerepo=re...

YYGP阅读 1k

yum安装MySQL
yum仓库 {代码...} 或者 {代码...} yum安装MySQL {代码...} 安装过程可能报错,附上解决方案:错误1 {代码...} 需执行yum module disable mysql然后重新install错误2 {代码...} 原因: MySQL GPG 密钥已过期导致...

YYGP阅读 960

CentOS离线安装rpm包
CentOS离线安装rpm包rpm离线包的下载先找一台有网络的CentOS机器利用CentOS系统yum下载好rpm包1、yum搜索要下的软件包,比如:jdk, mosquitto {代码...} 2、利用 yum 下载所需 rpm 包,将包下载到指定目录,比如:/ho...

阿亮说技术阅读 938

容器的swap内存
Linux上swap内存对应一块磁盘分区,当内存紧张时,可以把内存中的数据写入到swap分区;当需要读写这部分数据时,又可以将其从swap分区读入内存。

a朋阅读 650

1.1k 声望
97 粉丝
宣传栏