· Yorian Chiong · Drone  · 阅读时长 ≈ 8分钟

Linux增加虚拟内存Swp,以解决内存不足等问题

安装docker最少要多少内存?最低内存需求:2GB(但实际体验较差,建议至少4GB以上)。关键因素:Docker本身占用内存较少,但运行容器时内存需求取决于具体应用。

安装docker最少要多少内存?最低内存需求:2GB(但实际体验较差,建议至少4GB以上)。关键因素:Docker本身占用内存较少,但运行容器时内存需求取决于具体应用。

持续集成和构建的工具有很多,除了著名的 Jenkins,Travis,CircleCI,还有最近比较热门的 Github Action 和 Gitlab CI/CD。但是这些工具面对私人项目不是要收费就是占用大量服务器资源,作为个人开发者的私人项目如果想要使用并不友好。那么开源免费的 Drone CI 是个不错选择,它不但非常轻量,而且十分强大。并可以结合私有代码仓库自动编译、构建服务,几行脚本即可实现自动化部署。

Drone作为轻量级云原生CI/CD工具,相比Jenkins具有显著优势:

  • 资源占用低:基于Docker容器化运行,单个Pipeline平均内存消耗<100MB
  • 云原生支持:原生集成Kubernetes、Docker等云原生技术栈
  • 配置即代码:完全通过.drone.yml定义流程,版本可控
  • 高性能:测试显示并发构建能力比Jenkins高3-5倍16

前言

本文将分享如何在小内存VPS上,通过创建Swap分区巧妙地突破内存瓶颈,成功部署应用(测试环境)并提升系统稳定性的实战经验,希望能为同样身处内存困境的朋友们提供一些参考。

关于 Swap

在Linux系统中,内存管理是保证系统流畅运行的关键。你是否曾遭遇过系统卡顿,甚至在运行大型程序时意外崩溃的窘境? 这很可能源于内存不足。Swap,作为Linux内核中一项重要的内存管理技术,能有效缓解此类问题。本文将由浅入深地剖析Linux Swap的概念、作用、配置方法以及使用注意事项。

Swap(交换空间)本质上是硬盘上预留的一块特殊区域,它被巧妙地用来模拟物理内存(RAM)。 当RAM空间告急时,系统会将暂时不常用的数据“转移”到Swap分区,从而释放宝贵的内存资源,保障关键应用程序的正常运行。 形象地说,Swap就像一个“内存缓冲区”,在系统面临内存压力时,挺身而出,发挥缓冲作用。

Swap 的作用

  • 扩展可用内存:当物理内存(RAM)不足时,系统将部分不活跃的内存数据转移到 Swap 空间(硬盘/SSD 上),避免进程崩溃。
  • 支持休眠(Hibernate):休眠功能需要 Swap 空间存储内存快照。
  • 应对内存峰值:即使 RAM 充足,Swap 仍可缓解突发的高内存需求。

是否需要设置 Swap

建议启用 Swap 的场景:

  • 物理内存 ≤ 4GB:小内存设备(如 VPS、老旧电脑)必须设置 Swap。
  • 运行内存密集型应用:如数据库(MySQL)、虚拟机、编译大型代码。
  • 启用休眠功能:Swap 大小需 ≥ 物理内存。
  • 避免 OOM(内存耗尽):防止系统因内存不足强制终止进程。

可能无需 Swap 的场景:

  • 物理内存 ≥ 16GB 且负载稳定:如果内存常年富余,Swap 使用率极低。
  • 高速 SSD 敏感型应用:频繁 Swap 可能影响 SSD 寿命(但现代 SSD 通常能承受)。

Swap 使用优先级

Swap 使用优先级取决于 swappiness 的值大小(范围 0 - 100,默认 60),该值决定系统使用物理内存和Swap空间的倾向性。

  • 较低值(如 10):尽量少用 Swap,适合 SSD 或大内存。
  • 较高值(如 60):更积极使用 Swap,适合机械硬盘或小内存。

VPS 推荐配置

SSD 磁盘的 VPS 通用场景推荐以下配置:

  • 物理内存 ≤ 2GB:Swap = 2 × RAM,swappiness = 60
  • 2GB < 物理内存 ≤ 4GB:Swap = 4GB,swappiness = 30
  • 4GB < 物理内存:Swap = 4GB,swappiness = 10

管理 Swap

查看当前 Swap

查看当前系统内存使用情况:

free -m

Swap 交换分区大小即为当前虚拟内存大小。

设置 Swap

根据需要 Swap 大小创建一个空文件:

sudo fallocate -l 2G /swapfile

设置该文件权限为仅 root 可以读写:

sudo chmod 600 /swapfile

将该文件格式化为 Swap 文件:

sudo mkswap /swapfile

启用 Swap 文件:

sudo swapon /swapfile

写入 Swap 信息到系统启动分区挂载配置文件中:

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

禁用 Swap

停止所有的 Swap:

sudo swapoff -a

删除 Swap 文件:

sudo rm -rf /swapfile

编辑系统启动分区挂载配置文件:

sudo vim /etc/fstab

删除 Swap 信息:

/swapfile none swap sw 0 0

调整 Swap 使用优先级

查看当前 Swap 使用优先级

cat /proc/sys/vm/swappiness

写入配置到内核参数配置文件中:

echo 'vm.swappiness = <number>' | sudo tee -a /etc/sysctl.conf

为需要的值大小(范围 0 - 100),数字越大,系统越倾向于使用 Swap。

从配置文件加载并立即应用内核参数:

sudo sysctl -p

注意事项

配置swap并不复杂,但使用时需注意以下事项:

  • 适度分配:根据需求分配适度大小,避免过度分配,过大的swap不仅浪费磁盘空间,还会急剧降低系统性能。
  • 选择存储介质: 优先将swap放置在SSD上。 机械速度较慢,会降低swap的效果。
  • 定期监控: 使用free -htop命令监控swap的使用情况。 若swap长期处于高负荷状态,可能需要考虑增加RAM。
  • 安全至上: Swap可能存储敏感数据,如密码。 建议在关机时清空swap,或对其进行加密,防止数据泄露。

总结

通过上述步骤,我们成功在Debian系统上创建并启用了Swap文件,并确保它在系统重启后自动加载。合理的Swap配置可以帮助提高系统的稳定性和性能,特别是在物理内存较少的情况下。尤其是在内存受限的情况下,swap可作为重要的保障措施。无论你是系统管理员还是普通用户,配置swap都将带来显著的收益。

声明:以上内容为博主记录的博客文章,仅供参考。本文素材来源网络,版权归原作者所有。如涉及作品版权问题,请与我联系删除。

返回博客列表

Related Posts

View All Posts »
嵌入式开发接口Interfaces

嵌入式开发接口Interfaces

嵌入式开发中,经常遇到很多接口,比如串口、COM口、UART口, TTL、RS-232、RS-485,这里重点讲一下他们之间的关系。