【运维】Swap
在测试环境中我们经常遇到这样的场景物理内存被多服务挤占free -h显示剩余几十 MB服务进程无缘无故消失被 OOM Killer 处决SSH 连接超时compactd进程卡死 200 秒CPU 飙到 100%。根本原因内存严重不足时Linux 内核会启动一系列“自救”机制但这些机制在无 Swap 时往往会适得其反。本文将深入解释为什么测试环境开启 Swap并给出标准配置方案。一、内存耗尽时内核做了什么当物理内存RAM被占满且没有 Swap 交换空间时内核会按以下顺序“挣扎”内存回收kswapd– 尝试回收缓存/缓冲区但回收速度跟不上分配速度。内存压缩compactd– 尝试将碎片化的内存页“压缩”成连续的大块为后续大页分配做准备。压缩需要大量 CPU 遍历页表且会持有锁导致系统响应极慢。此时 SSH 守护进程sshd可能因 CPU 饥饿或内存分配阻塞而超时断开。OOM Killer 出手– 如果回收和压缩都无效内核最后一步是“选择”一个进程杀掉释放内存。OOM Killer 的评分机制oom_score会优先杀掉占用内存最多、运行时间最短的进程——你的关键微服务很可能中枪。无 Swap 时系统在“压缩”和“杀进程”之间反复横跳服务稳定性无从谈起。二、 Swap 能同时解决“被杀”与“被卡”否是物理内存紧张是否启用 Swap?kswapd 回收 cache内存仍不足compactd 高频压缩CPU 飙升 锁争用SSH 超时 / 服务假死OOM Killer 随机杀进程内核将不活跃页换出到 Swap释放连续物理内存块compactd 压力骤降系统响应恢复OOM Killer 不再触发2.1 防 OOM Killer提供“缓冲垫”Swap 相当于内存的“溢出仓库”。当 RAM 吃紧时内核优先将不常访问的冷数据如后台日志缓冲区、闲置服务的堆内存换出到磁盘。这降低了内存压力峰值让 OOM Killer 几乎没有机会触发从而保住所有运行中的服务。2.2 防 compactd 假死瞬间释放连续空间内存压缩compactd之所以耗时是因为它需要移动已分配的页来“拼出”大块连续区域。Swap 换出操作能直接整页回收腾出大量连续空闲页内核不再需要费力压缩。实测中开启 Swap 后compactd的 CPU 占用从 80% 降至 5%SSH 响应立即恢复。三、Swap 的另一个隐性价值把物理内存留给“热点”应用在微服务环境中大量服务会写入日志、缓存历史数据这些数据访问频率很低。如果它们全挤在 RAM 中真正高频使用的业务堆内存反而无处安放。内存类型无 SwapRAM 100%占用有 SwapRAM 70% Swap 30%热点应用堆频繁被换出/回收GC 压力大常驻 RAM性能稳定冷数据日志、历史缓存占用大量 RAM自动换出到 Swap不争抢资源系统缓存紧张充裕Swap 就像“内存分级存储”热数据走 RAM冷数据走 Swap让有限的内存用在刀刃上。四、一键创建 2GB Swap以下命令在 CentOS/Ubuntu 通用推荐 2~4GB视剩余磁盘而定# 1. 创建 2GB 空文件sudofallocate-l2G /swapfile# 2. 设置严格权限防止普通用户读取sudochmod600/swapfile# 3. 格式化为 swap 分区sudomkswap/swapfile# 4. 启用 swapsudoswapon/swapfile# 5. 开机自动挂载echo/swapfile none swap sw 0 0|sudotee-a/etc/fstab# 6. 调低 Swap 倾向优先使用物理内存避免过度依赖磁盘sudosysctlvm.swappiness10echovm.swappiness10|sudotee-a/etc/sysctl.confvm.swappiness10的含义取值范围 0~100值越大越积极使用 Swap。设为 10 表示仅在 RAM 使用超过 90% 时才换出优先压榨物理内存同时保留 Swap 作为“紧急避难所”。完成后执行free -h若 Swap 行显示2.0G即成功。五、最后Swap 是备胎不是主力就像汽车备胎平时用不上但爆胎时能让你开到修理厂。测试环境不会承受生产级流量Swap 的磁盘 I/O 影响完全可以接受。监控 Swap 使用率若free -h发现 Swap 使用率长期 50%说明物理内存确实不足。此时应增加 RAM 或优化服务内存占用而非无限扩大 Swap过度依赖 Swap 会导致性能雪崩。生产环境慎用生产环境若依赖 Swap 来“续命”往往掩盖了内存配置问题且磁盘 I/O 延迟会直接拖慢响应。测试环境则完全不同——稳定第一性能第二。小结小内存服务器Swap 不该是可选项而是默认配置。给测试环境加上 2~4G Swap你会发现“莫名其妙”的故障一夜消失。

相关新闻

UE5音频中间件选型指南:MetaSound、FMOD与Wwise深度对比

UE5音频中间件选型指南:MetaSound、FMOD与Wwise深度对比

1. 项目概述:音频中间件选型,一个决定项目成败的隐形战场在UE5项目开发的早期阶段,音频系统的选型往往容易被忽视,但它却像项目的“听觉骨架”,一旦定型,后期重构的成本极高。当你的项目从原型走向规模化&a…

2026/10/19 16:56:54 阅读更多 →
Three.js vs Babylon.js vs R3F:Web3 3D 可视化框架的渲染性能与生态适配度评测

Three.js vs Babylon.js vs R3F:Web3 3D 可视化框架的渲染性能与生态适配度评测

Three.js vs Babylon.js vs R3F:Web3 3D 可视化框架的渲染性能与生态适配度评测 一、引言 Web3 应用中的 3D 可视化需求正在从"锦上添花"转变为"刚需组件"。NFT 市场需要 3D 模型展示、Metaverse 项目依赖实时 3D 渲染、链上数据看板需要 3D 拓…

2026/10/20 16:28:41 阅读更多 →
提醒:AI还没正式上线,已经被人全网扫描

提醒:AI还没正式上线,已经被人全网扫描

企业的AI应用可能还在测试,攻击者却已经开始批量寻找公网中的模型接口、MCP服务和访问凭证。近期,一台没有部署MCP服务和本地大模型的普通网站服务器,在连续14天内仍收到接近200次AI相关探测。这不是针对某家企业的定向攻击,而是一…

2026/10/19 14:47:40 阅读更多 →

最新新闻

Python+MySQL学生管理系统:可视化界面落地与避坑指南

Python+MySQL学生管理系统:可视化界面落地与避坑指南

简介:这是一套面向Python与数据库初学者的学生管理系统实战项目,采用Python编写客户端逻辑、MySQL负责数据存储,适合正在学习桌面应用开发或需要完成课程设计的学生参考。压缩包共2个文件,包含1个py主程序与1个sql数据库脚本&…

2026/10/20 17:19:49 阅读更多 →
MySQL反斜杠转义全解析:从字符串插入到LIKE查询的避坑指南

MySQL反斜杠转义全解析:从字符串插入到LIKE查询的避坑指南

先交代一个真实翻车现场。有天业务方发来一张截图,某张配置表里的 Windows 路径字段,原本应该是C:\Users\某应用目录\data\config.ini,结果库里存成了C:Users某应用目录dataconfig.ini,所有反斜杠集体失踪。我一开始以为是应用层写…

2026/10/20 17:19:49 阅读更多 →
电商评论情感分析实战:从数据清洗到BERT蒸馏部署全记录

电商评论情感分析实战:从数据清洗到BERT蒸馏部署全记录

这个项目标题一看就是从实战里踩出来的,数据坑、部署、硬核笔记,说明作者真刀真枪跑过完整链路,不是拿公开数据集跑个demo就完事。文本分类和情感分析在NLP里属于入门必练但做好极难的方向,难就难在数据永远是脏的、标签永远是偏的…

2026/10/20 17:19:49 阅读更多 →
TensorFlow工业级AI工程实践:从计算图到TFX流水线

TensorFlow工业级AI工程实践:从计算图到TFX流水线

1. 这不是“学个框架”那么简单:TensorFlow到底在解决什么问题?很多人第一次听说TensorFlow,是在某次技术分享会上听到“谷歌开源的深度学习框架”,或者在招聘JD里看到“熟悉TensorFlow者优先”。但如果你真去翻它的GitHub仓库、读…

2026/10/20 17:19:49 阅读更多 →
双线性插值原理与C语言实现:图像缩放算法详解

双线性插值原理与C语言实现:图像缩放算法详解

简介:这份资源围绕双线性插值方法及实现展开,面向图像处理、计算机图形学与数值计算方向的学习者,尤其适合希望用C语言理解插值数学原理并动手实现的开发者。包内共31个文件,以h头文件、cpp源文件、obj目标文件为主,辅…

2026/10/20 17:19:49 阅读更多 →
Prescan+Simulink+CarSim联仿:多工况自动驾驶避障模型搭建与标定实战

Prescan+Simulink+CarSim联仿:多工况自动驾驶避障模型搭建与标定实战

做自动驾驶避障仿真的人,迟早会跟三个名字绑在一起:Prescan、Simulink、CarSim。标题里那套“不同工况避障模型”,说白了就是让一辆装有虚拟传感器的车,在模拟道路环境里遇到静止车、前车急减速、旁边车道突然切进来、行人横穿这些…

2026/10/20 17:18:48 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →