相信大家在使用腾讯云轻量服务器时, 由于轻量服务器规格都比较小,cpu 慢都可以接受,可以等,毕竟轻量服务器价格上有优势,但是当需要比较大内存的时候,比如需要编译一个前端项目时需要比较大的内存资源,经常会遇过内存不足整个系统卡死的情况。这种卡死是致命的,无法恢复,只能去控制台触发底层重启,对于正在运行的业务和使用体验来说是不可接受的。
还好是有办法的,在 Linux 中我们可以通过添加交换空间将虚拟内存扩展到物理内存(RAM)之外,也就是将磁盘扩充成内存使用,可以实现“内存的超卖”。
下面将介绍如何在腾讯云轻量服务器上添加一些交换空间(swap)来当作内存使用, 防止应用程序因系统内存耗尽而卡死。
什么是轻量应用服务器(TencentCloud Lighthouse)?产品优势介绍参考文档 产品概述 。
1. 查看当前系统 swap 情况。
# 查看当前开启的 swapon 文件系统
root@VM-0-12-ubuntu:~# swapon --show
NAME TYPE SIZE USED PRIO
/opt/swapfile file 6G 1.4G -2 # 系统已开启的 swap 文件系统
# 查看资源使用情况
root@VM-0-12-ubuntu:~# free -h
total used free shared buff/cache available
Mem: 1.9Gi 1.0Gi 120Mi 12Mi 808Mi 724Mi
Swap: 6.0Gi 1.4Gi 4.6Gi # swap 空间占用情况2. 为系统添加新的swap文件系统。
# 开始前建议先看看磁盘空间是否足够做 swap
root@VM-0-12-ubuntu:~# df -h
# 从磁盘申请占 1G 的空间供 swap 使用,这里以 /swapfile2 文件为例
root@VM-0-12-ubuntu:~# fallocate -l 1G /swapfile2
# 安全考虑,给 swap 文件设置仅 root 权限
root@VM-0-12-ubuntu:~# chmod 600 /swapfile2
# 格式化 swap 文件系统
root@VM-0-12-ubuntu:~# mkswap /swapfile2
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=2347d779-1238-415e-9c13-98634abca760
# 开启 swap 文件系统
root@VM-0-12-ubuntu:~# swapon /swapfile2
# 再次查看当前开启的 swapon 文件系统
root@VM-0-12-ubuntu:~# swapon --show
NAME TYPE SIZE USED PRIO
/opt/swapfile file 6G 1.4G -2
/swapfile2 file 1024M 0B -3 # 新添加的 swap 文件系统,说明添加成功3. 配置开机自动挂载swap 文件系统
目前我们手动挂载开启了 swap 文件系统,当节点重启时不会自动挂载,下来我们在/etc/fstab文件中配置挂载选项实现开机时自动挂载 swap 文件。
# 追加 /swapfile2 文件到 fstab 配置文件中
root@VM-0-12-ubuntu:~# echo '/swapfile2 none swap sw 0 0' | sudo tee -a /etc/fstab
/swapfile2 none swap sw 0 04. swap 使用相关内核参数优化
使用交换文件的代价是“昂贵的”,因为它们比与 RAM 的交互花费的时间更长,可能导致系统性能显著下降,所以我们需要优化一下交换空间使用的条件。
第一个推荐的优化配置项是vm.swappiness ,决定将数据从 RAM 交换到交换空间的频率,该值介于 0 到 100 之间,表示百分比。
# 越接近于零时,越不会将数据交换到磁盘,提高物理内存充足时的性能。
# 默认 60, 可以根据实际情况调整, 比如调整到 20
sysctl vm.swappiness=20第二个推荐的优化配置项是vm.vfs_cache_pressure, 控制文件系统缓存的回收策略。
# 默认值是100, 表示系统从缓存中删除信息的速度,我们可以降低该值以减缓删除的速度,以达到利用缓存的目的,例如 50
sysctl vm.vfs_cache_pressure=50如果需要上述内核参数永久生效,需要添加下 /etc/sysctl.conf , 如下所示:
# 安全追加配置文件永久生效
cat << EOF >> /etc/sysctl.conf
vm.swappiness=20
vm.vfs_cache_pressure=50
EOF
# 刷新生效配置
sysctl -p按照本指南中的步骤操作,你可以在内存不足情况下获得一些空间,不至于系统 OOM 卡死, 配置swap 空间对于避免这些问题非常有用。
腾讯云双十一官网活动链接:双11活动上云拼团Go
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。