前言:买的服务器,有时候swap会变红,看下一共才256k,想着增加下,网上查了写资料,有了新的认识,记录下来
Swap(交换分区)类似Windows的虚拟内存
Windows虚拟内存(维基百科)
虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),而实际上物理内存通常被分隔成多个内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。与没有使用虚拟内存技术的系统相比,使用这种技术使得大型程序的编写变得更容易,对真正的物理内存(例如RAM)的使用也更有效率。此外,虚拟内存技术可以使多个进程共享同一个运行库,并通过分割不同进程的内存空间来提高系统的安全性。
注意:
虚拟内存不只是“用磁盘空间来扩展物理内存”的意思——这只是扩充内存级别以使其包含硬盘驱动器而已。把内存扩展到磁盘只是使用虚拟内存技术的一个结果,它的作用也可以通过覆盖或者把处于不活动状态的程序以及它们的数据全部交换到磁盘上等方式来实现。对虚拟内存的定义是基于对地址空间的重定义的,即把地址空间定义为“连续的虚拟内存地址”,以借此“欺骗”程序,使它们以为自己正在使用一大块的“连续”地址。
那些需要快速访问或者相应时间非常稳定的嵌入式系统,以及其他的具有特殊应用的计算机系统,可能会为了避免让运算结果的可预测性降低,而选择不使用虚拟内存。
Linux Swap交换分区(百度百科)
Swap分区在系统的物理内存不够用的时候,把硬盘内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。
红帽的linux指南(红帽原文)
当物理内存 (RAM) 已满时,会使用 Linux 中的交换空间。如果系统需要更多内存资源并且 RAM 已满,则内存中的非活动页面将被移至交换空间。虽然交换空间可以帮助具有少量 RAM 的机器,但不应将其视为更多 RAM 的替代品。交换空间位于硬盘驱动器上,其访问时间比物理内存慢。交换空间可以是专用交换分区(推荐)、交换文件或交换分区和交换文件的组合。请注意,增加了Btrfs并没有支持的交换空间。
在过去的几年里,推荐的交换空间量随着系统中的 RAM 量线性增加。然而,现代系统通常包含数百 GB 的 RAM。因此,推荐的交换空间被认为是系统内存工作负载的函数,而不是系统内存。
下图说明了交换分区的推荐大小,具体取决于系统中的 RAM 量以及是否需要足够的内存供系统休眠。推荐的交换分区大小是在安装过程中自动建立的。但是,为了允许休眠,您需要在自定义分区阶段编辑交换空间。
推荐的系统交换空间
系统中的 RAM 量 | 推荐的交换空间 | 如果允许休眠,推荐的交换空间 |
---|---|---|
⩽ 2GB | RAM 容量的 2 倍 | RAM 容量的 3 倍 |
> 2 GB – 8 GB | 等于 RAM 的数量 | RAM 容量的 2 倍 |
> 8 GB – 64 GB | 至少 4 GB | RAM 容量的 1.5 倍 |
> 64 GB | 至少 4 GB | 不建议休眠 |
查看SWAP分区大小
free -h
新增SWAP分区
方案一: 添加一个swap文件作为swap
- 创建swap分区的文件, 可以根据自己的情况修改count的值
dd if=/dev/zero of=/root/swapfile bs=1M count=1024
其中 bs是每块的大小,count是块的数量,bs * count,就是swap文件的大小了,这里就是1M * 1024=1G,可以根据自己的情况修改count的值。
- 格式化交换分区文件
mkswap /root/swapfile
- 启用swap分区文件
swapon /root/swapfile
如果报错就使用下面命令 swapon: /root/swapfile:不安全的权限 0644,建议使用 0600。
chmod -R 0600 /root/swapfile
- 检查sawp分区
free -h
- 添加开机启动
echo “/root/swapfile swap swap defaults 0 0” >> /etc/fstab
top
命令查看swap
方案二: 新建分区作为swap分区
查看磁盘情况,找到未分区磁盘 fdisk -l
- 设置交换分区
mkswap /dev/sda2
- 启用交换分区
swapon /dev/sdb2
- 修改 fstab 配置,设置开机自动挂载该分区
echo “/dev/swapfile swap swap defaults 0 0” >> /etc/fstab
修改swappiness值
- 查看当前的swappiness数值
cat /proc/sys/vm/swappiness
- 修改swappiness值,以10为例子
sysctl vm.swappiness=10
- 设置永久有效,重启系统后生效
echo “vm.swappiness = 10” >> /etc/sysctl.conf
Swap的删除
- 查看目录
swapon -s
- 停止正在使用swap分区
swapoff /dev/swapfile
- 删除swap分区文件
rm /dev/swapfile
- 删除之前开机启动配置
vim /etc/fstab
/dev/swapfile swap swap defaults 0 0
禁用Swap
- 禁用指定目录
swapoff /dev/dm-1
- 禁用所有 from /etc/fstab
swapoff -a
启动Swap
- 启动指定目录
swapon /root/swapfile
- 启动所有swap
swapon -a