腾讯云服务器开启虚拟内存
最近云服务器内存不足导致部分服务挂了,这时候可以通过虚拟内存来对内存进行扩容。所谓虚拟内存将部分硬盘当成内存使用,性能会有所下降。虚拟内存=物理内存(RAM)+Swap分区/文件。
swap分区/文件
在开启虚拟内存之前,先介绍下swap。
通常linux都会为硬盘分配一个分区用于内存拓展,这个分区就是swap分区。也可以不分区直接创建一个文件来充当swap文件,但是分区的效率会更高一些。
swap分区的作用如下
- 扩展可用内存:当物理内存(RAM)不足时,系统会将部分不活跃的内存数据临时转移到Swap分区(硬盘上的特定空间),腾出RAM供当前运行的程序使用。
- 支持休眠:没有Swap分区则无法启用休眠功能。
- 优化内存管理:即使物理内存充足,Linux内核也会将部分长时间未使用的内存页移至Swap,以提高RAM的利用效率。
开启虚拟内存
首先查看一下系统是否开启了虚拟内存
1 | free -h |
显示结果如下,Swap部分为0
1 | [root@VM-24-9-centos ~]# free -h |
创建swap文件
1 | mkdir /swap |
命令解释:
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 | sudo chmod 600 /swap/swapfile # 设置权限,防止被篡改 |
这时候swap文件就已经生效了,使用命令再次查看
1 | free -h |
显示结果如下
1 | [root@VM-24-9-centos ~]# free -h |
上述操作只是临时生效,重启之后就会失效,如果需要永久生效则需要修改/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 不参与文件系统检查) |