腾讯云服务器开启虚拟内存

最近云服务器内存不足导致部分服务挂了,这时候可以通过虚拟内存来对内存进行扩容。所谓虚拟内存将部分硬盘当成内存使用,性能会有所下降。虚拟内存=物理内存(RAM)+Swap分区/文件

swap分区/文件

在开启虚拟内存之前,先介绍下swap。

通常linux都会为硬盘分配一个分区用于内存拓展,这个分区就是swap分区。也可以不分区直接创建一个文件来充当swap文件,但是分区的效率会更高一些。

swap分区的作用如下

  • 扩展可用内存:当物理内存(RAM)不足时,系统会将部分不活跃的内存数据临时转移到Swap分区(硬盘上的特定空间),腾出RAM供当前运行的程序使用。
  • 支持休眠:没有Swap分区则无法启用休眠功能。
  • 优化内存管理:即使物理内存充足,Linux内核也会将部分长时间未使用的内存页移至Swap,以提高RAM的利用效率。

开启虚拟内存

首先查看一下系统是否开启了虚拟内存

1
free -h

显示结果如下,Swap部分为0

1
2
3
4
[root@VM-24-9-centos ~]# free -h
total used free shared buff/cache available
Mem: 15G 12G 175M 84M 2.7G 2.4G
Swap: 0G 0G 0G

创建swap文件

1
2
mkdir /swap
dd if=/dev/zero of=/swap/swapfile bs=1024 count=2024288

命令解释:

  • dd:这是一个用于复制和转换文件的命令行工具,常用于磁盘操作。
  • if=/dev/zero:if 表示输入文件(input file)。/dev/zero 是一个特殊的设备文件,读取时会提供无限的空字符(ASCII NULL,即二进制的0)。
  • of=/swap/swapfile:of 表示输出文件(output file)。/swap/swapfile 是目标文件的路径,这里表示在 /swap 目录下创建一个名为 swapfile 的文件。
  • bs=1024:bs 表示块大小(block size),这里设置为1024字节(即1KB)。
  • count=8388608:count 表示要复制的块数。总文件大小 = 块大小 × 块数 = 1024 × 8388608 = 8589934592 字节(约8GB)。

为什么是8GB

Linux 官方推荐的 Swap 空间大小

物理内存 (RAM) 推荐 Swap 大小
≤ 2GB 2 × RAM
2GB – 8GB = RAM
8GB – 64GB 0.5 × RAM(最小 4GB)
≥ 64GB 4GB(仅用于休眠或特殊情况)

格式化swap文件

1
2
3
sudo chmod 600 /swap/swapfile       # 设置权限,防止被篡改
sudo mkswap /swap/swapfile # 格式化为 Swap 文件
sudo swapon /swap/swapfile # 临时启用 Swap

这时候swap文件就已经生效了,使用命令再次查看

1
free -h

显示结果如下

1
2
3
4
[root@VM-24-9-centos ~]# free -h
total used free shared buff/cache available
Mem: 15G 12G 175M 84M 2.7G 2.4G
Swap: 8.0G 1.5G 6.5G

上述操作只是临时生效,重启之后就会失效,如果需要永久生效则需要修改/etc/fstab
在文件末尾添加

1
/swap/swapfile none swap sw 0 0

添加了之后系统启动时,会读取 /etc/fstab,发现这一行配置后,自动执行swapon /swap/swapfile,使该文件成为可用的 Swap 空间。
无需手动运行 swapon 命令,实现永久生效。

各字段解析(6 个字段)

字段 作用
设备/文件 /swap/swapfile 指定 Swap 文件的路径
挂载点 none Swap 不需要挂载点,设为 none
文件系统类型 swap 声明这是一个 Swap 文件
挂载选项 sw 等价于 sw(Swap 专用选项)
dump 备份标志 0 禁用 dump 备份(Swap 无需备份)
fsck 检查顺序 0 禁止 fsck 检查(Swap 不参与文件系统检查)