需求
最近有项目需要用到 Mysql8.0
,但是腾讯云轻量服务器的4G内存,实际可用只有3600多M,在编译安装 Mysql8.0
的时候会 Kill
掉安装进程,导致安装失败。
所以就需要给 Linux 服务器添加 Swap 交换分区(就相当于 Windows 的虚拟内存),来保证能够成功编译安装 Mysql8.0
,需要注意的是,使用 Swap 交换分区会比较吃磁盘的性能,如果磁盘性能不够好,可能会对服务器的性能产生负面影响
这里使用的系统是 Centos7.9
其他系统请自行测试
关于 swap 空间的大小
很多老的教程都说 swap 空间要设置到自己物理内存的1.5~2倍
但是看到Redhat官方的文档中的建议,感觉更合理
物理内存 | 建议的交换空间大小 |
---|---|
4G | 内存的2倍,不超过4G |
4G~8G | 等于物理内存大小 |
8G~64G | 设置为8G |
创建 swap 空间,会占用磁盘空间,请注意自己的磁盘的剩余空间
查看当前系统swap是否存在以及使用情况:
代码语言:shell复制free –m
或
swapon –s
查看硬盘使用情况(一般/dev/vda1为挂载硬盘):
代码语言:shell复制df –h
创建swap空间
bs=1M count=4096
表示创建一个4G(1M*4096)大小的块文件。
使用dd命令创建名为swapfile 的swap交换文件(文件名和目录任意):
代码语言:shell复制# 创建虚拟内存文件
dd if=/dev/zero of=/mnt/swap bs=1M count=4096
# 添加权限,不添加也不影响使用
chmod 0600 /mnt/swap
# 设置交换分区文件
mkswap /mnt/swap
# 启用swap交换分区
swapon /mnt/swap
注意:如果不使用 chmod 0600 /mnt/swap
添加权限,执行以上命令可能会出现:“不安全的权限 0644,建议使用 0600”类似提示,但是实际上也是已经激活了,可以正常使用,但还是建议添加一下权限
设置开机自动挂载
代码语言:shell复制echo "/mnt/swap swap swap defaults 0 0" >> /etc/fstab
设置虚拟内存使用率
swappiness=0
表示最大限度使用物理内存,然后才是swap空间。
swappiness=100
表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。
# 默认一般是30,建议设置为10,即内存剩余小于10%的时候使用swap内存
echo "vm.swappiness = 10" >> /etc/sysctl.conf
使配置生效
代码语言:shell复制sysctl -p
重启服务器
代码语言:shell复制reboot
查看swap
的情况
代码语言:shell复制[root@localhost swap]# free -m
total used free shared buffers cached
Mem: 980 910 70 3 8 575
-/ buffers/cache: 326 654
Swap: 4095 0 4095
删除swap空间
查看swap分区文件
代码语言:shell复制swapon -s
停止swap分区
代码语言:shell复制swapoff /mnt/swap
删除swap分区文件
代码语言:shell复制rm -rf /mnt/swap
删除fstab文件里面的开机自动挂载配置
使用 nano 修改fstab文件:
代码语言:shell复制sudo nano /etc/fstab
删除开机自动挂载配置内容
代码语言:shell复制/mnt/swap swap swap defaults 0 0
修改完成后使用 ctrl o
保存
使用 ctrl x
退出
重启服务器
代码语言:shell复制reboot